Pagini recente » Cod sursa (job #855694) | Cod sursa (job #242048) | Cod sursa (job #2945889) | Cod sursa (job #1637866) | Cod sursa (job #2395130)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
const int DN=1e6+5;
int n,m,z,ls,ld,k;
string s,ss;
long long sol;
int dp[2*DN];
int main()
{
getline(fin,ss);
s="#";
for(int i=0;i<ss.size();i++)
{
s+=ss[i];
s+="#";
}
n=s.size();
ls=0;
ld=-1;
for(int i=0;i<n;i++)
{
if(i>ld)
k=1;
else
k=min(ld-i,dp[ls+ld-i]);
while(i-k>=0&&i+k<n&&s[i-k]==s[i+k]) k++;
dp[i]=k;
sol+=dp[i]/2;
if(i+k>ld)
{
ld=i+k;
ls=i-k;
}
}
fout<<sol;
}