49862023-04-08 15:38:36TomaSajtHázszámokcpp17Hibás válasz 25/1003ms5424 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int base;

map<pair<int, int>, ll> mem;
// I have no idea how this works, just started messing around with formulas on
// OEIS and got this working

// calculates the number of `d` digits used from `1..n`
ll pog(ll n, int d) {
  if (n <= 0)
    return 0;
  if (mem.count({n, d})) {
    return mem.at({n, d});
  }
  ll r = n % base;
  ll q = n / base;
  ll res = q + (r + 1) * pog(q, d) + (base - r - 1) * pog(q - 1, d);
  if (d != 0 && r >= d) {
    res++;
  }
  return mem[make_pair(n, d)] = res;
}

int main() {
  cin >> base;
  vector<ll> budget(base);
  for (auto &b : budget)
    cin >> b;
  auto is_enough = [&](int n) {
    for (int i = 0; i < base; i++) {
      ll a = pog(n, i);
      if (a > budget[i])
        return false;
    }
    return true;
  };

  ll curr = 0;
  for (int i = 20; i >= 0; i--) {
    ll next = curr + (1ll << i);
    if (is_enough(next)) {
      curr = next;
    }
  }
  cout << curr;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1684 KiB
2Elfogadva3ms1880 KiB
3Hibás válasz3ms2512 KiB
subtask225/25
4Elfogadva3ms2428 KiB
5Elfogadva3ms2528 KiB
6Elfogadva3ms2740 KiB
7Elfogadva3ms2956 KiB
8Elfogadva3ms3048 KiB
9Elfogadva3ms3316 KiB
10Elfogadva3ms3508 KiB
11Elfogadva3ms3676 KiB
12Elfogadva3ms3856 KiB
13Elfogadva3ms3732 KiB
14Elfogadva3ms3724 KiB
15Elfogadva3ms3856 KiB
16Elfogadva3ms3860 KiB
17Elfogadva3ms4000 KiB
18Elfogadva3ms4100 KiB
19Elfogadva3ms4180 KiB
subtask30/10
20Hibás válasz3ms4224 KiB
21Hibás válasz3ms4224 KiB
22Hibás válasz3ms4224 KiB
23Elfogadva3ms4208 KiB
24Hibás válasz3ms4432 KiB
subtask40/15
25Hibás válasz3ms4604 KiB
26Hibás válasz3ms4496 KiB
27Hibás válasz3ms4656 KiB
28Hibás válasz3ms4592 KiB
29Hibás válasz3ms4596 KiB
30Elfogadva3ms4716 KiB
31Hibás válasz3ms4976 KiB
32Hibás válasz3ms5068 KiB
33Hibás válasz3ms5188 KiB
subtask50/20
34Elfogadva3ms4940 KiB
35Elfogadva3ms4984 KiB
36Hibás válasz3ms5144 KiB
37Hibás válasz3ms5068 KiB
38Hibás válasz3ms5164 KiB
39Hibás válasz3ms5168 KiB
40Hibás válasz3ms5172 KiB
41Hibás válasz3ms5168 KiB
42Hibás válasz3ms5324 KiB
subtask60/30
43Hibás válasz3ms5212 KiB
44Hibás válasz3ms5192 KiB
45Hibás válasz3ms5424 KiB
46Hibás válasz3ms5264 KiB
47Hibás válasz3ms5272 KiB
48Hibás válasz3ms5408 KiB
49Hibás válasz3ms5324 KiB
50Hibás válasz3ms5164 KiB
51Hibás válasz3ms5172 KiB
52Elfogadva3ms5132 KiB
53Hibás válasz3ms5328 KiB
54Hibás válasz3ms5300 KiB
55Hibás válasz3ms5160 KiB
56Hibás válasz3ms5164 KiB
57Hibás válasz3ms5176 KiB
58Hibás válasz3ms5188 KiB
59Hibás válasz3ms5180 KiB
60Hibás válasz3ms5316 KiB