#include "dzilib.h" #include <bits/stdc++.h> using namespace std; #define ll long long vector <int> divCnt; int t, q, l; long long c, n; int countDiv (int x) { int res = 0; for (int i = 1; i*i <= x; i++) if (x % i == 0) { if (i*i == x) res++; else res += 2; } return res; } void prec () { divCnt.resize(n+l+1); for (int i = 1; i <= n+l; i++) divCnt[i] = countDiv(i); } bool match (int x, vector <int> &pattern) { for (int i = 1; i <= l; i++) { if (divCnt[x+i] != pattern[i-1]) { return false; } } return true; } int main() { t = GetT(); q = GetQ(); c = GetC(); n = GetN(); l = min({c-2, (ll)q/t-2, 200ll}); prec(); while(t--) { vector <int> pattern; for (int i = 1; i <= l; i++) { pattern.push_back(Ask(i)); } for (int i = 1; i <= n; i++) { if (match(i, pattern)) { Answer(i); break; } } } 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 | #include "dzilib.h" #include <bits/stdc++.h> using namespace std; #define ll long long vector <int> divCnt; int t, q, l; long long c, n; int countDiv (int x) { int res = 0; for (int i = 1; i*i <= x; i++) if (x % i == 0) { if (i*i == x) res++; else res += 2; } return res; } void prec () { divCnt.resize(n+l+1); for (int i = 1; i <= n+l; i++) divCnt[i] = countDiv(i); } bool match (int x, vector <int> &pattern) { for (int i = 1; i <= l; i++) { if (divCnt[x+i] != pattern[i-1]) { return false; } } return true; } int main() { t = GetT(); q = GetQ(); c = GetC(); n = GetN(); l = min({c-2, (ll)q/t-2, 200ll}); prec(); while(t--) { vector <int> pattern; for (int i = 1; i <= l; i++) { pattern.push_back(Ask(i)); } for (int i = 1; i <= n; i++) { if (match(i, pattern)) { Answer(i); break; } } } return 0; } |