Submission #1363016

#TimeUsernameProblemLanguageResultExecution timeMemory
1363016tolbiBalanced Integer (CCO25_day1problem3)C++20
21 / 25
30087 ms460 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int INF = 1000000000000000000;
int lcm(int a, int b) {
  return a * b / gcd(a, b);
}
int32_t main(){
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  vector<int> pts;
  pts.push_back(1);
  pts.push_back(INF+1);
  int B, N;
  cin >> B >> N;
  int lcmv = 1;
  for (int i = 2; i <= B; i++) {
    __int128 x = i;
    while (x <= INF) {
      pts.push_back(x);
      x *= i;
    }
    lcmv = lcm(lcmv, i-1);
  }
  sort(pts.begin(), pts.end());
  pts.erase(unique(pts.begin(), pts.end()));
  vector<int> d(B+1, 1);
  vector<__int128> X(B+1);
  iota(X.begin(), X.end(), 0);
  for (int i = 0; i + 1 < pts.size(); i++) {
    int l = pts[i];
    int r = pts[i+1]-1;
    if (r < N) continue;
    vector<int> say(lcmv+1, 0);
    int md = -1;
    for (int j = 2; j <= B; j++) {
      while (X[j] <= l) X[j] *= j, d[j]++;
      if (((j-1) * d[j]) % 2) goto mahmut;
      if (j % 2) {
        for (int a = ((j-1)*d[j]/2)%(j-1); a < lcmv; a+=j-1) {
          say[a]++;
          if (say[a] == B-1) assert(md==-1), md=a;
        }
      } else {
        for (int a = 0; a < lcmv; a+=j-1) {
          say[a]++;
          if (say[a] == B-1) assert(md==-1), md=a;
        }
      }
    }
    if (md != -1) {
      l = max(l, N);
      int hh = l % lcmv;
      hh = md - hh;
      if (hh < 0) hh += lcmv;
      l += hh;
      while (l <= r) {
        if (__builtin_popcountll(l)*2 == d[2]) {
          for (int j = 3; j <= B; j++) {
            int sum = 0;
            int x = l;
            while (x) {
              sum += x % j;
              x /= j;
            }
            if (sum * 2 != d[j] * (j - 1)) {
              goto gg;
            }
          }  
          cout << l << endl;
          exit(0);
          gg:;
        }
        l += lcmv;
      }
    }
    mahmut:;
  }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...