#include<iostream>
#include<vector>
using namespace std;
int n;
long long s, a[100005];
bool f(int k) {
if(k > n || s % k != 0) return 0;
vector<long long> w(n + 1, 0);
for(int i = 1; i <= n; ++i) {
w[i] = a[i] - a[i - 1] + (i > k ? w[i - k] : 0);
if(i <= n - k + 1) {
if(w[i] < 0) return 0;
} else if(w[i] != 0) return 0;
}
return 1;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
if(!(cin >> n)) return 0;
for(int i = 1; i <= n; ++i) {
cin >> a[i];
s += a[i];
}
int b = 1;
for(long long i = 1; i * i <= s; ++i) {
if(s % i == 0) {
if(f(s / i)) { cout << s / i << endl; return 0; }
if(f(i)) b = max(b, (int)i);
}
}
cout << b << endl;
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 | #include<iostream> #include<vector> using namespace std; int n; long long s, a[100005]; bool f(int k) { if(k > n || s % k != 0) return 0; vector<long long> w(n + 1, 0); for(int i = 1; i <= n; ++i) { w[i] = a[i] - a[i - 1] + (i > k ? w[i - k] : 0); if(i <= n - k + 1) { if(w[i] < 0) return 0; } else if(w[i] != 0) return 0; } return 1; } int main() { ios::sync_with_stdio(0); cin.tie(0); if(!(cin >> n)) return 0; for(int i = 1; i <= n; ++i) { cin >> a[i]; s += a[i]; } int b = 1; for(long long i = 1; i * i <= s; ++i) { if(s % i == 0) { if(f(s / i)) { cout << s / i << endl; return 0; } if(f(i)) b = max(b, (int)i); } } cout << b << endl; return 0; } |
English