#include <bits/stdc++.h>
using namespace std;
using ll = int64_t;
int main(){
ios_base::sync_with_stdio(false), cin.tie(nullptr);
int N;
cin >> N;
vector<ll> A(N);
for(auto& x : A) cin >> x;
ll S = accumulate(A.begin(), A.end(), ll(0));
set<ll> divs;
for(ll d = 1; d * d <= S; d++){
if(S % d == 0){
divs.insert(d);
divs.insert(S/d);
}
}
vector<ll> A1(N+1);
for(int i = 0; i < N; i++){
A1[i] += A[i];
A1[i+1] -= A[i];
}
ll ans = 0;
for(ll d : divs){
if(d > N) continue;
bool ok = true;
for(int i = 0; i <= N && i < d; i++){
ll sum = 0;
for(int j = i; j <= N; j += d){
sum += A1[j];
if(sum < 0) ok = false;
}
if(sum != 0) ok = false;
}
if(ok) ans = d;
}
cout << ans << '\n';
}
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 | #include <bits/stdc++.h> using namespace std; using ll = int64_t; int main(){ ios_base::sync_with_stdio(false), cin.tie(nullptr); int N; cin >> N; vector<ll> A(N); for(auto& x : A) cin >> x; ll S = accumulate(A.begin(), A.end(), ll(0)); set<ll> divs; for(ll d = 1; d * d <= S; d++){ if(S % d == 0){ divs.insert(d); divs.insert(S/d); } } vector<ll> A1(N+1); for(int i = 0; i < N; i++){ A1[i] += A[i]; A1[i+1] -= A[i]; } ll ans = 0; for(ll d : divs){ if(d > N) continue; bool ok = true; for(int i = 0; i <= N && i < d; i++){ ll sum = 0; for(int j = i; j <= N; j += d){ sum += A1[j]; if(sum < 0) ok = false; } if(sum != 0) ok = false; } if(ok) ans = d; } cout << ans << '\n'; } |
English