Pagini recente » Cod sursa (job #1490216) | Cod sursa (job #1483909) | Cod sursa (job #897084) | Cod sursa (job #236650) | Cod sursa (job #466570)
Cod sursa(job #466570)
#include<fstream>
using namespace std;
const char iname[]="numarare.in";
const char oname[]="numarare.out";
const int maxn=100005;
ifstream f(iname);
ofstream g(oname);
int a[maxn],l[maxn],st,dr,i,n,p;
long long rez;
int main()
{
f>>n;
for(i=1;i<=n;++i)
f>>a[i],a[i-1]-=a[i];
--n;
l[1]=0;
st=1;
dr=1;
for(i=2;i<=n;++i)
if(i<=dr)
{
p=st+dr-i;
l[i]=min(l[p],dr-i);
if(i+l[i]==dr)
{
st=i-l[i];
dr=i+l[i];
while(st>1&&dr<n&&a[i-l[i]-1]==a[i+l[i]+1])
++l[i],--st,++dr;
}
}
else
{
l[i]=0;
st=dr=i;
while(st>1&&dr<n&&a[i-l[i]-1]==a[i+l[i]+1])
++l[i],--st,++dr;
}
for(i=1;i<=n;++i)
rez+=l[i]+1;
g<<rez<<"\n";
}