Pagini recente » Cod sursa (job #1023819) | Cod sursa (job #1254994) | Cod sursa (job #167321) | Cod sursa (job #1685274) | Cod sursa (job #2387409)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
int n,i,j,c,r,dp[1000005];
string s;
void transform(string &s)
{
string t=s;
s=" #";
for(i=0;i<t.size();i++)
s=s+t[i]+"#";
}
int main() {
fin>>s;
transform(s);
n=(int)s.size();
c=1;
r=1;
for(i=2;i<=n;i++)
{
while(c+dp[c]<=n && c-dp[c]>0 && s[c+dp[c]]==s[c-dp[c]])
dp[c]++;
r=c+dp[c]-1;
j=c-(i-c);
if(i<=r) dp[i]=min(dp[j], r-i);
if(i>r || r-i<=dp[j]) c=i, r=i;
}
long long rez=0;
for(i=1;i<n;i++)
rez+=1LL*dp[i]/2;
fout<<rez<<"\n";
}