QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#603272 | #9426. Relearn through Review | 333zhan# | WA | 241ms | 3656kb | C++20 | 2.1kb | 2024-10-01 15:37:32 | 2024-10-01 15:37:33 |
Judging History
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct ST {
vector <vector <int>> f;
vector <int> lg;
ST (int n, vector <int> a) {
lg.resize (n + 1);
f.assign (n + 1, vector <int> (lg[n] + 1));
for (int i = 1; i <= n; i ++) {
f[i][0] = a[i];
}
for (int j = 1; j <= lg[n]; j ++) {
for (int i = 1; i + (1 << j) - 1 <= n; i ++) {
f[i][j] = gcd (f[i][j - 1], f[i + (1 << j - 1)][j - 1]);
}
}
}
int query (int l, int r) {
int k = lg[r - l + 1];
return gcd (f[l][k], f[r - (1 << k) + 1][k]);
}
};
void solve () {
int n, k;
cin >> n >> k;
vector <int> a (n + 1);
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
vector <int> pre (n + 2), suf (n + 2);
pre[1] = a[1];
suf[n] = a[n];
for (int i = 2; i <= n; i ++) {
pre[i] = gcd (pre[i - 1], a[i]);
}
for (int i = n - 1; i >= 1; i --) {
suf[i] = gcd (suf[i + 1], a[i]);
}
vector <int> b (n + 1);
for (int i = 1; i <= n; i ++) {
b[i] = a[i] + k;
}
ST st (n, b);
int maxx = 0;
for (int i = 1; i <= n; i ++) {
for (int j = i; j <= n; j ++) {
int l = j, r = n;
auto check = [&] (int x) {
return st.query (i, x) == st.query (i, j);
};
while (l < r) {
int mid = (l + r + 1) / 2;
if (check (mid)) {
l = mid;
} else {
r = mid - 1;
}
}
int gc = st.query (i, l);
if (i > 1) {
gc = gcd (gc, pre[i - 1]);
}
if (l < n) {
gc = gcd (gc, suf[l + 1]);
}
maxx = max (maxx, gc);
j = l;
}
}
cout << maxx << '\n';
}
signed main () {
ios::sync_with_stdio (false);
cin.tie (nullptr);
int T = 1;
cin >> T;
while (T --) {
solve ();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3596kb
input:
2 6 2 5 3 13 8 10 555 3 0 3 6 9
output:
5 3
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 241ms
memory: 3656kb
input:
100000 1 608611451460421713 33155506392034032 1 743116173559300609 6138108577573005 7 364454564010802125 657035115675878115 657035115675878115 657035115675878115 657035115675878115 657035115675878115 292580551665075990 657035115675878115 4 316648374341335221 365788422120542814 182894211060271407 731...
output:
641766957852455745 749254282136873614 1021489679686680240 182894211060271407 880411769063535667 560553564512176618 183698346865682381 962990836390050009 616597869896951268 878097339332572161 188820994675344528 997057718507559252 949074379610491450 825539616137503327 737386482584933424 37712171390733...
result:
wrong answer 3rd lines differ - expected: '657035115675878115', found: '1021489679686680240'