#include <iostream>
#include <vector>
using namespace std;
void vecp(const vector<long long>& spot) {
for (long long j=0; j<spot.size(); j++)
cout << spot[j] << " ";
cout << endl;
}
bool test(const vector<long long>& b, long long k) {
vector<long long> b_copy;
long long last = 0;
long long fs = min(k, static_cast<long long>(b.size()-k+1));
long long bur, roz, last_ogon, bogon, l_bk;
for (long long i=0; i<fs; i++) {
bur = b[i];
roz = bur - last;
if (roz < 0) return false;
last = bur;
b_copy.push_back(roz);
}
for (long long i=k; i<b.size()-k+1; i++) {
bur = b[i];
roz = bur - last + b_copy[b_copy.size()-k];
if (roz < 0) return false;
last = bur;
b_copy.push_back(roz);
}
last_ogon = last;
bogon = max(fs, static_cast<long long>(b.size() - k + 1));
for (long long i=bogon; i<b.size(); i++){
long long ind = i-bogon;
bur = b[i];
if (k-ind > b_copy.size()) {
l_bk = 0;
} else {
l_bk = b_copy[b_copy.size()-k+ind];
}
roz = bur - last_ogon + l_bk;
if (roz != 0) {
return false;
}
last_ogon = bur;
}
return(true);
}
int main()
{
ios_base::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
vector<long long> bursztyny;
long long n, m, k, p;
cin >> n;
for (long long i=0; i<n; i++) {
cin >> p;
bursztyny.push_back(p);
}
long long suma = 0;
for (long long i=0; i<bursztyny.size(); i++) {
suma += bursztyny[i];
}
long long wynik = 1;
for (long long i=bursztyny.size()-1; i>0; i--) {
if ((suma % i) == 0) {
if (test(bursztyny, i)) {
wynik = i;
break;
}
}
}
long long tsama = bursztyny[0];
long long rowne = true;
long long bb;
for (long long i=0; i<bursztyny.size(); i++) {
bb = bursztyny[i];
if (bb != tsama) {
rowne = false;
break;
}
}
if (rowne) wynik = bursztyny.size();
cout << wynik;
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 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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <iostream> #include <vector> using namespace std; void vecp(const vector<long long>& spot) { for (long long j=0; j<spot.size(); j++) cout << spot[j] << " "; cout << endl; } bool test(const vector<long long>& b, long long k) { vector<long long> b_copy; long long last = 0; long long fs = min(k, static_cast<long long>(b.size()-k+1)); long long bur, roz, last_ogon, bogon, l_bk; for (long long i=0; i<fs; i++) { bur = b[i]; roz = bur - last; if (roz < 0) return false; last = bur; b_copy.push_back(roz); } for (long long i=k; i<b.size()-k+1; i++) { bur = b[i]; roz = bur - last + b_copy[b_copy.size()-k]; if (roz < 0) return false; last = bur; b_copy.push_back(roz); } last_ogon = last; bogon = max(fs, static_cast<long long>(b.size() - k + 1)); for (long long i=bogon; i<b.size(); i++){ long long ind = i-bogon; bur = b[i]; if (k-ind > b_copy.size()) { l_bk = 0; } else { l_bk = b_copy[b_copy.size()-k+ind]; } roz = bur - last_ogon + l_bk; if (roz != 0) { return false; } last_ogon = bur; } return(true); } int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); vector<long long> bursztyny; long long n, m, k, p; cin >> n; for (long long i=0; i<n; i++) { cin >> p; bursztyny.push_back(p); } long long suma = 0; for (long long i=0; i<bursztyny.size(); i++) { suma += bursztyny[i]; } long long wynik = 1; for (long long i=bursztyny.size()-1; i>0; i--) { if ((suma % i) == 0) { if (test(bursztyny, i)) { wynik = i; break; } } } long long tsama = bursztyny[0]; long long rowne = true; long long bb; for (long long i=0; i<bursztyny.size(); i++) { bb = bursztyny[i]; if (bb != tsama) { rowne = false; break; } } if (rowne) wynik = bursztyny.size(); cout << wynik; return(0); } |
English