Pagini recente » Cod sursa (job #60961) | Cod sursa (job #1037520) | Cod sursa (job #1731401) | Cod sursa (job #2964073) | Cod sursa (job #2767185)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
long long s;
int n,i,l,r,k,a[1000011];
char c[1000011];
int main()
{
f>>c;
n=strlen(c);
for(i=0,l=0,r=-1;i<n;i++)
{
if(i>r)
k=1;
else
k=min(a[l+r-i],r-i+1);
while(i-k>=0 && i+k<n && c[i-k]==c[i+k])
k++;
a[i]=k-1;
if(i+k>r)
{
l=i-k;
r=i+k;
}
s=s+a[i]+1;
}
for(i=0,l=0,r=-1;i<n;i++)
{
if(i>r)
k=0;
else
k=min(a[l+r-i+1],r-i+1);
while(i-k>=0 && i+k<n && c[i-k-1]==c[i+k])
k++;
a[i]=k-1;
if(i+k>r)
{
l=i-k-1;
r=i+k;
}
s=s+a[i]+1;
}
g<<s;
return 0;
}