Pagini recente » Cod sursa (job #2277778) | Cod sursa (job #1172336) | Cod sursa (job #1150979) | Cod sursa (job #382167) | Cod sursa (job #1419807)
#include <cstdio>
FILE* in=fopen("numarare.in","r");
FILE* out=fopen("numarare.out","w");
const int Q=200007;
int v[Q];
int n;
int p[Q];
int main()
{
fscanf(in,"%d",&n);
n=n*2-1;
for(int i=1; i<=n; i+=2)
fscanf(in,"%d",&v[i]);
int dr=0,ce=0;
int rez=0,act;
for(int i=2; i<=n; i+=2)
{
if(i>dr)
{
ce=i;
dr=i;
}
else
{
p[i]=p[2*ce-i];
if(p[i]>dr-i)
p[i]=dr-i;
}
if(p[i]==0)
{
p[i]=1;
}
act=v[i-1]+v[i+1];
while(i-p[i]-2>0 && i+p[i]+2<=n && v[i-p[i]-2]+v[i+p[i]+2]==act)
p[i]+=2;
if(i+p[i]>dr)
{
dr=i+p[i];
ce=i;
}
rez+=(p[i]+1)/2;
}
fprintf(out,"%d\n",rez);
return 0;
}