#include <bits/stdc++.h>
using namespace std;
bool verify(int k, int offset, const vector<int>& arr) {
long long cnt = 0;
for (int i = offset; i < (int) arr.size(); i += k) {
cnt += arr[i];
if (cnt > 0) {
return false;
}
}
return cnt == 0;
}
bool first_check(int k, const vector<int>& arr) {
static constexpr int T = 10;
for (int t = 0; t < T; t++) {
int a = rand() % k;
if (!verify(k, a, arr)) {
return false;
}
}
return true;
}
bool last_check(int k, const vector<int>& arr) {
for (int i = 0; i < k; i++) {
if (!verify(k, i, arr)) {
return false;
}
}
return true;
}
int main() {
srand(time(NULL));
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<int> arr(n+1);
long long sum_ = 0;
for (int i = 1; i <= n; i++) {
cin >> arr[i];
sum_ += arr[i];
}
for (int i = 0; i < n; i++) {
arr[i] -= arr[i+1];
}
for (int i = n; i >= 2; i--) {
if (sum_ % i != 0) {
continue;
}
if (!first_check(i, arr)) {
continue;
}
if (last_check(i, arr)) {
cout << i << "\n";
return 0;
}
}
cout << "1\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 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 | #include <bits/stdc++.h> using namespace std; bool verify(int k, int offset, const vector<int>& arr) { long long cnt = 0; for (int i = offset; i < (int) arr.size(); i += k) { cnt += arr[i]; if (cnt > 0) { return false; } } return cnt == 0; } bool first_check(int k, const vector<int>& arr) { static constexpr int T = 10; for (int t = 0; t < T; t++) { int a = rand() % k; if (!verify(k, a, arr)) { return false; } } return true; } bool last_check(int k, const vector<int>& arr) { for (int i = 0; i < k; i++) { if (!verify(k, i, arr)) { return false; } } return true; } int main() { srand(time(NULL)); ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> arr(n+1); long long sum_ = 0; for (int i = 1; i <= n; i++) { cin >> arr[i]; sum_ += arr[i]; } for (int i = 0; i < n; i++) { arr[i] -= arr[i+1]; } for (int i = n; i >= 2; i--) { if (sum_ % i != 0) { continue; } if (!first_check(i, arr)) { continue; } if (last_check(i, arr)) { cout << i << "\n"; return 0; } } cout << "1\n"; } |
English