Pagini recente » Cod sursa (job #646505) | Cod sursa (job #2123913) | Cod sursa (job #1487884) | Cod sursa (job #2164241) | Cod sursa (job #1980550)
#include <iostream>
#include <fstream>
using namespace std;
int p[2000005],sum[2000005];
string orig;
char s[2000005];
int i,n,c,r;
long long tot;
int main()
{
ifstream f("pscpld.in");
ofstream g("pscpld.out");
f>>orig;
for(i=0;i<orig.size();i++)
{
s[++n]='*';
sum[n]=sum[n-1];
s[++n]=orig[i];
sum[n]=sum[n-1]+1;
}
s[0]=',';
for(i=1;i<=n;i++)
{
if(i<=r)
p[i]=min(p[c*2-i],r-i);
while(i-p[i]>=0&&i+p[i]<=n&&s[i-p[i]]==s[i+p[i]])
p[i]++;
p[i]--;
if(i+p[i]>r)
c=i,r=i+p[i];
tot+=1LL*(sum[i+p[i]]-sum[i-1]);
}
g<<tot;
return 0;
}