#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; } |
English