Pagini recente » Cod sursa (job #2129424) | Cod sursa (job #1512782) | Cod sursa (job #2720338) | Cod sursa (job #2384988) | Cod sursa (job #2679623)
#include <bits/stdc++.h>
using namespace std;
ifstream in("pscpld.in");
ofstream out("pscpld.out");
string s,aux;
long long ans=0;
int z[2000005]; //2*1000000
int main()
{
in>>aux;
for(int i=0;i<aux.size();i++)
{
s+="#";
s+=aux[i];
ans++;
}
s+="#";
int C=0,R=0;
for(int i=1;i<s.length();i++)
{
int aux=2*C-i;
if(i>R || z[aux]>=R-i)
{
if(i>R)
R=i;
int k=R;
while(k<s.length() && s[k]==s[2*i-k])
k++;
k--;
z[i]=k-i;
if(k>C)
{
C=i;
R=k;
}
}
else
z[i]=z[aux];
ans+=z[i]/2;
}
out<<ans;
return 0;
}