Pagini recente » Cod sursa (job #2265118) | Cod sursa (job #732100) | Cod sursa (job #3263810) | Cod sursa (job #1770812) | Cod sursa (job #2471357)
#include <fstream>
#include <cstring>
#define FAST std::ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
const int maxi=2000005;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
long long mij,sum,v[2*maxi],n,st,jdr,jst,dr,k=-1;
char c[2*maxi];
string s;
int main()
{
FAST
cin>>s;
n=s.size();
n*=2;
for(int i=0;i<=n;i+=2){
c[i]='*';
c[i+1]=s[++k];
}
for(int i=1;i<=2*n;i++){
if(i<=dr){
mij=st+dr-i;
v[i]=min(v[mij],mij-st+1);
int jdr=i+v[i],jst=i-v[i];
while(jst>=0 && jdr<=n && c[jdr]==c[jst]){
jdr++;
jst--;
v[i]++;
}
if(dr<i+v[i]-1){
dr=i+v[i]-1;
st=i-v[i]+1;
}
}
else{
int jdr=i,jst=i;
while(jst>=0 && jdr<=n && c[jdr]==c[jst]){
jdr++;
jst--;
v[i]++;
}
dr=i+v[i]-1;
st=i-v[i]+1;
}
}
for(int i=1;i<=n;i++)
sum+=v[i]/2;
cout<<sum;
return 0;
}