fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. ios::sync_with_stdio(false);
  6. cin.tie(nullptr);
  7.  
  8. long long B, q;
  9. cin >> B >> q;
  10.  
  11. vector<long long> a(B);
  12. for (long long i = 0; i < B; ++i) cin >> a[i];
  13.  
  14. vector<long long> queries(q);
  15. for (long long i = 0; i < q; ++i) cin >> queries[i];
  16.  
  17. // Suma wszystkich cyfr
  18. long long total_sum = 0;
  19. for (long long i = 0; i < B; ++i)
  20. total_sum += i * a[i];
  21.  
  22. long long mod = total_sum % (B - 1);
  23.  
  24. // Jeśli suma % (B-1) != 0, trzeba usunąć jedną cyfrę
  25. if (mod != 0) {
  26. bool found = false;
  27. for (long long c = 1; c < B; ++c) {
  28. if (a[c] > 0 && c % (B - 1) == mod) {
  29. a[c]--;
  30. found = true;
  31. break;
  32. }
  33. }
  34. // jeśli nie znaleziono, spróbuj usunąć 0 (rzadko)
  35. if (!found && a[0] > 0 && 0 % (B - 1) == mod)
  36. a[0]--;
  37. }
  38.  
  39. // Tworzymy "pozycje" cyfr w liczbie, od lewej do prawej
  40. vector<long long> positions;
  41. for (long long i = B - 1; i >= 0; --i) {
  42. for (long long j = 0; j < a[i]; ++j)
  43. positions.push_back(i);
  44. }
  45.  
  46. // Jeśli wszystkie cyfry to zero
  47. bool all_zero = true;
  48. for (auto d : positions) if (d != 0) all_zero = false;
  49. if (all_zero) positions = {0};
  50.  
  51. long long n = positions.size();
  52. for (long long i = 0; i < q; ++i) {
  53. long long k = queries[i];
  54. if (k >= n) cout << -1 << "\n";
  55. else
  56. // Cyfry liczymy od prawej (LSB = 0)
  57. cout << positions[n - 1 - k] << "\n";
  58. }
  59.  
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0s 5320KB
stdin
4 4
1 2 1 1
4
3
0 
1
stdout
-1
3
0
1