#include<iostream> #include<vector> #include<map> #include<algorithm> #include "dzilib.h" using namespace std; const int N = 1'000'005; const int N2 = 2 * N; void check(vector<int> &cnt) { vector<int> candidates; candidates.reserve(N); for (int i = 1; i < N; i++) { candidates.push_back(i); } for (int y = 0; ; y++) { int n = Ask(y); vector<int> matched; for (int cand : candidates) { if (cnt[cand + y] == n) { matched.push_back(cand); } } candidates.clear(); candidates.insert(candidates.end(), matched.begin(), matched.end()); if (candidates.size() == 1) { Answer(candidates[0]); break; } } } int main() { vector<int> v(N2); for (int i = 2; i * i <= N2; i++) { if (!v[i]) { for (int k = i * i; k <= N2; k += i) { if (!v[k]) { v[k] = i; } } } } vector<int> cnt(N2, 1); for (int i = 1; i < N2; i++) { int x = i; map<int, int> m; if (v[x] == 0) { m[x]++; } else { while (v[x] > 0) { m[v[x]]++; x /= v[x]; } m[x]++; } for (auto &e : m) { cnt[i] *= (e.second + 1); } } cnt[1] = 1; map<int, vector<int>> divs; for (int i = 1; i < N2; i++) { divs[cnt[i]].push_back(i); } long long t = GetT(); long long n = GetN(); long long q = GetQ(); long long c = GetC(); while (t--) { check(cnt); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include<iostream> #include<vector> #include<map> #include<algorithm> #include "dzilib.h" using namespace std; const int N = 1'000'005; const int N2 = 2 * N; void check(vector<int> &cnt) { vector<int> candidates; candidates.reserve(N); for (int i = 1; i < N; i++) { candidates.push_back(i); } for (int y = 0; ; y++) { int n = Ask(y); vector<int> matched; for (int cand : candidates) { if (cnt[cand + y] == n) { matched.push_back(cand); } } candidates.clear(); candidates.insert(candidates.end(), matched.begin(), matched.end()); if (candidates.size() == 1) { Answer(candidates[0]); break; } } } int main() { vector<int> v(N2); for (int i = 2; i * i <= N2; i++) { if (!v[i]) { for (int k = i * i; k <= N2; k += i) { if (!v[k]) { v[k] = i; } } } } vector<int> cnt(N2, 1); for (int i = 1; i < N2; i++) { int x = i; map<int, int> m; if (v[x] == 0) { m[x]++; } else { while (v[x] > 0) { m[v[x]]++; x /= v[x]; } m[x]++; } for (auto &e : m) { cnt[i] *= (e.second + 1); } } cnt[1] = 1; map<int, vector<int>> divs; for (int i = 1; i < N2; i++) { divs[cnt[i]].push_back(i); } long long t = GetT(); long long n = GetN(); long long q = GetQ(); long long c = GetC(); while (t--) { check(cnt); } return 0; } |