#include <bits/stdc++.h>
using namespace std;
int n;
long long total;
long long T[100'005];
bool valid[100'005];
bool check_cand(int wave) {
queue<pair<int, long long>> Q;
Q.push({0, T[0]});
long long curr_num = T[0];
int idx = 1;
while (idx < n) {
while (!Q.empty() && idx - Q.front().first == wave) {
curr_num -= Q.front().second;
Q.pop();
}
if (T[idx] > curr_num) {
if (idx + wave > n) {
return false;
}
Q.push({idx, T[idx] - curr_num});
curr_num = T[idx];
}
else if (T[idx] < curr_num) {
return false;
}
idx++;
}
return true;
}
void update_valid(int wave) {
for (int i = wave; i < n; i += wave) {
valid[i] = false;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
int output = 1;
for (int i = 0; i < n; ++i) cin >> T[i];
for (int i = 0; i < n; ++i) total += T[i];
for (int i = 0; i <= n; ++i) valid[i] = true;
for (int i = 2; i <= n; ++i) {
if (!valid[i]) continue;
else if (total % i != 0) valid[i] = false;
else if (!check_cand(i)) update_valid(i);
else output = i;
}
cout << output;
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 | #include <bits/stdc++.h> using namespace std; int n; long long total; long long T[100'005]; bool valid[100'005]; bool check_cand(int wave) { queue<pair<int, long long>> Q; Q.push({0, T[0]}); long long curr_num = T[0]; int idx = 1; while (idx < n) { while (!Q.empty() && idx - Q.front().first == wave) { curr_num -= Q.front().second; Q.pop(); } if (T[idx] > curr_num) { if (idx + wave > n) { return false; } Q.push({idx, T[idx] - curr_num}); curr_num = T[idx]; } else if (T[idx] < curr_num) { return false; } idx++; } return true; } void update_valid(int wave) { for (int i = wave; i < n; i += wave) { valid[i] = false; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; int output = 1; for (int i = 0; i < n; ++i) cin >> T[i]; for (int i = 0; i < n; ++i) total += T[i]; for (int i = 0; i <= n; ++i) valid[i] = true; for (int i = 2; i <= n; ++i) { if (!valid[i]) continue; else if (total % i != 0) valid[i] = false; else if (!check_cand(i)) update_valid(i); else output = i; } cout << output; return 0; } |
English