Pagini recente » Cod sursa (job #2694192) | Cod sursa (job #1788981) | Cod sursa (job #2309147) | Cod sursa (job #2274398) | Cod sursa (job #2395046)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
const int DN=1e6+5;
int n,m,z;
string s;
long long sol;
struct sdf
{
int pr;
int c[30];
int l;
int fr;
}r[DN];
int main()
{
getline(fin,s);
n=s.size();
s=" "+s;
m=2;
z=2;
r[1].l=-1;
r[1].pr=1;
r[2].pr=1;
for(int i=1;i<=n;i++)
{
while(s[i]!=s[i-1-r[z].l])
z=r[z].pr;
if(r[z].c[s[i]-'a'])
{
z=r[z].c[s[i]-'a'];
r[z].fr++;
//cout<<z<<'\n';
continue;
}
m++;
r[z].c[s[i]-'a']=m;
r[m].l=r[z].l+2;
z=r[z].pr;
while(s[i]!=s[i-1-r[z].l])
z=r[z].pr;
r[m].pr=z;
z=m;
r[z].fr++;
}
for(int i=2;i<=m;i++)
sol+=1LL*r[i].l*r[i].fr;
fout<<sol;
}