#include <bits/stdc++.h>
#define pii pair<int, int>
#define For(i, l, r) for (int i=l;(l<=r?i<=r:i>=r);(l<=r?i++:i--))
#define DEBUG
#ifdef DEBUG
auto operator<<(auto &o,auto p)->decltype(p.first,o){return o<<'('<<p.first<<", "<<p.second<<')';}
auto operator<<(auto &o,auto x)->decltype(x.end(),o){o<<'{';int i=2;for(auto &e:x)o<<(", ")+i<<e,i=0;return o<<'}';}
#define LOG(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X);
#else
#define LOG(x...)(void)0
#endif
#define int long long
using namespace std;
const int M = 100005;
int n;
vector<int> a, c;
bool check(int k){
int sum = 0;
for (int i = 0; i < n; i++){
if (i >= k)
sum -= c[i - k];
c[i] = a[i] - sum;
if (c[i] < 0)
return 0;
if (i + k > n){
if (c[i])
return 0;
}
else
sum += c[i];
}
return 1;
}
void solve(){
cin >> n;
a = vector<int>(n);
c = vector<int>(n);
int sum = 0;
for (int i = 0; i < n; i++){
cin >> a[i];
sum += a[i];
}
int best = 1;
vector<bool> ok(n + 1);
vector<int> divs;
for (int i = 2; i <= n; i++){
if (i <= best)
continue;
if (sum % i == 0){
bool o = 1;
for (auto el: divs)
if (i % el == 0 && !ok[el]){
o = 0;
break;
}
if (o && check(i)){
best = max(best, i);
ok[i] = 1;
}
divs.push_back(i);
}
}
cout << best << '\n';
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int t = 1;
//cin >> t;
while(t--)
solve();
}
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 <bits/stdc++.h> #define pii pair<int, int> #define For(i, l, r) for (int i=l;(l<=r?i<=r:i>=r);(l<=r?i++:i--)) #define DEBUG #ifdef DEBUG auto operator<<(auto &o,auto p)->decltype(p.first,o){return o<<'('<<p.first<<", "<<p.second<<')';} auto operator<<(auto &o,auto x)->decltype(x.end(),o){o<<'{';int i=2;for(auto &e:x)o<<(", ")+i<<e,i=0;return o<<'}';} #define LOG(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X); #else #define LOG(x...)(void)0 #endif #define int long long using namespace std; const int M = 100005; int n; vector<int> a, c; bool check(int k){ int sum = 0; for (int i = 0; i < n; i++){ if (i >= k) sum -= c[i - k]; c[i] = a[i] - sum; if (c[i] < 0) return 0; if (i + k > n){ if (c[i]) return 0; } else sum += c[i]; } return 1; } void solve(){ cin >> n; a = vector<int>(n); c = vector<int>(n); int sum = 0; for (int i = 0; i < n; i++){ cin >> a[i]; sum += a[i]; } int best = 1; vector<bool> ok(n + 1); vector<int> divs; for (int i = 2; i <= n; i++){ if (i <= best) continue; if (sum % i == 0){ bool o = 1; for (auto el: divs) if (i % el == 0 && !ok[el]){ o = 0; break; } if (o && check(i)){ best = max(best, i); ok[i] = 1; } divs.push_back(i); } } cout << best << '\n'; } signed main(){ cin.tie(0)->sync_with_stdio(0); int t = 1; //cin >> t; while(t--) solve(); } |
English