Mai intai trebuie sa te autentifici.
Cod sursa(job #1004920)
Utilizator | Data | 3 octombrie 2013 20:06:08 | |
---|---|---|---|
Problema | Reguli | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.76 kb |
#include <cstdio>
using namespace std;
const int MAX_N=500100;
long long v[MAX_N];
int pi[MAX_N];
int n;
void prefix() {
pi[1]=0;
int p=0;
for(int i=2;i<=n;i++) {
while(p&&v[p+1]!=v[i]) {
p=pi[p];
}
if(v[p+1]==v[i]) {
p++;
}
pi[i]=p;
}
}
int main() {
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
n--;
for(int i=0;i<=n;i++) {
scanf("%lld",&v[i]);
}
for(int i=n;i>=1;i--) {
v[i]=v[i]-v[i-1];
}
prefix();
//for(int i=1;
int l=n;
while(pi[l]!=0) {
l=pi[l];
}
if(n==l) {
printf("%d",n);
}
else {
printf("%d",(n-l)-pi[n-l]);
}
return 0;
}