#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//#define DEBUG
long long changes[100001], T[100001];
int n;
bool isPossible(int k) {
for (int i = 0; i < n; i++) {
changes[i] = 0;
}
long long change = 0;
#ifdef DEBUG
cout << "K: " << k << endl;
#endif // DEBUG
for (int i = 0; i < n; i++) {
change += changes[i];
#ifdef DEBUG
cout << "I: " << i << " KOREKTA: " << changes[i] << " MAMY: " << T[i]-change << endl;
#endif // DEBUG
if (i <= n-k) {
if (T[i] - change < 0) {
#ifdef DEBUG
cout << "IMPOSSIBLE" << endl;
#endif // DEBUG
return false;
}
changes[i+k] -= T[i]-change;
change += T[i]-change;
} else {
if (T[i] - change != 0) {
#ifdef DEBUG
cout << "IMPOSSIBLE" << endl;
#endif // DEBUG
return false;
}
}
}
return true;
}
int main() {
ios_base::sync_with_stdio(0);
long long sum = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> T[i];
sum += T[i];
}
vector<long long> dzielniki;
for (long long i = 1; i*i <= sum; i++) {
if (sum%i) continue;
if (i <= n) dzielniki.push_back(i);
if (sum/i <= n) dzielniki.push_back(sum/i);
}
sort(dzielniki.begin(), dzielniki.end(), greater());
for (int i = 0; i < dzielniki.size(); i++) {
if (isPossible(dzielniki[i])) {
cout << dzielniki[i] << endl;
break;
}
}
}
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; //#define DEBUG long long changes[100001], T[100001]; int n; bool isPossible(int k) { for (int i = 0; i < n; i++) { changes[i] = 0; } long long change = 0; #ifdef DEBUG cout << "K: " << k << endl; #endif // DEBUG for (int i = 0; i < n; i++) { change += changes[i]; #ifdef DEBUG cout << "I: " << i << " KOREKTA: " << changes[i] << " MAMY: " << T[i]-change << endl; #endif // DEBUG if (i <= n-k) { if (T[i] - change < 0) { #ifdef DEBUG cout << "IMPOSSIBLE" << endl; #endif // DEBUG return false; } changes[i+k] -= T[i]-change; change += T[i]-change; } else { if (T[i] - change != 0) { #ifdef DEBUG cout << "IMPOSSIBLE" << endl; #endif // DEBUG return false; } } } return true; } int main() { ios_base::sync_with_stdio(0); long long sum = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> T[i]; sum += T[i]; } vector<long long> dzielniki; for (long long i = 1; i*i <= sum; i++) { if (sum%i) continue; if (i <= n) dzielniki.push_back(i); if (sum/i <= n) dzielniki.push_back(sum/i); } sort(dzielniki.begin(), dzielniki.end(), greater()); for (int i = 0; i < dzielniki.size(); i++) { if (isPossible(dzielniki[i])) { cout << dzielniki[i] << endl; break; } } } |
English