#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n, sum = 0, maxx = 0, maxx2 = 1;
cin >> n;
vector<long long> v(n);
for (long long i = 0; i < n; i++) {
cin >> v[i];
sum += v[i];
maxx = max(maxx, v[i]);
}
vector<long long> w;
for (long long i = 1; i <= ((sum + (maxx - 1)) / maxx); i++) {
if (sum % i == 0) w.push_back(i);
}
for (long long i = 0; i < w.size(); i++) {
long long x = w[i], sum = 0;
vector<long long> vi(n);
bool czy = true;
for (long long j = 0; j < n; j++) {
if (j >= x) sum -= vi[j - x];
if (sum > v[j]) {
czy = false;
break;
}
if (sum < v[j] && n - x < j) {
czy = false;
break;
}
vi[j] = v[j] - sum;
sum += v[j] - sum;
}
if (czy) maxx2 = max(maxx2, x);
}
cout << maxx2;
}
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 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, sum = 0, maxx = 0, maxx2 = 1; cin >> n; vector<long long> v(n); for (long long i = 0; i < n; i++) { cin >> v[i]; sum += v[i]; maxx = max(maxx, v[i]); } vector<long long> w; for (long long i = 1; i <= ((sum + (maxx - 1)) / maxx); i++) { if (sum % i == 0) w.push_back(i); } for (long long i = 0; i < w.size(); i++) { long long x = w[i], sum = 0; vector<long long> vi(n); bool czy = true; for (long long j = 0; j < n; j++) { if (j >= x) sum -= vi[j - x]; if (sum > v[j]) { czy = false; break; } if (sum < v[j] && n - x < j) { czy = false; break; } vi[j] = v[j] - sum; sum += v[j] - sum; } if (czy) maxx2 = max(maxx2, x); } cout << maxx2; } |
English