#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
bool czy(int k, const vector<int>& pref, int n){
vector<int> tab(k, 0);
for(int i=1; n+1>=i; i++){
int mod = i % k;
tab[mod] += pref[i];
if(i <= n - k + 1){
if(tab[mod] < 0) return false;
}else{
if(tab[mod] != 0) return false;
}
}
return true;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n; cin>>n;
vector<int>A(n+1, 0);
int sum = 0;
for(int i=1; n>=i; i++){
cin >> A[i];
sum += A[i];
}
vector<int>pref(n+2, 0);
for(int i=1; n>=i; i++){
pref[i] = A[i] - A[i - 1];
}
pref[n+1] = -A[n];
vector<int> divs;
for(int i=1; sum>=i*i; i++){
if(sum % i == 0){
if(i <= n) divs.push_back(i);
int j = sum / i;
if(j != i and j <= n) divs.push_back(j);
}
}
sort(divs.rbegin(), divs.rend());
for(auto x : divs){
if(czy(x, pref, n)){
cout<<x;
return 0;
}
}
cout<<1;
}
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; #define int long long bool czy(int k, const vector<int>& pref, int n){ vector<int> tab(k, 0); for(int i=1; n+1>=i; i++){ int mod = i % k; tab[mod] += pref[i]; if(i <= n - k + 1){ if(tab[mod] < 0) return false; }else{ if(tab[mod] != 0) return false; } } return true; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; vector<int>A(n+1, 0); int sum = 0; for(int i=1; n>=i; i++){ cin >> A[i]; sum += A[i]; } vector<int>pref(n+2, 0); for(int i=1; n>=i; i++){ pref[i] = A[i] - A[i - 1]; } pref[n+1] = -A[n]; vector<int> divs; for(int i=1; sum>=i*i; i++){ if(sum % i == 0){ if(i <= n) divs.push_back(i); int j = sum / i; if(j != i and j <= n) divs.push_back(j); } } sort(divs.rbegin(), divs.rend()); for(auto x : divs){ if(czy(x, pref, n)){ cout<<x; return 0; } } cout<<1; } |
English