Pagini recente » Cod sursa (job #1391543) | Cod sursa (job #1173579) | Istoria paginii runda/cei_mai_mari_olimpicari_runda_3 | Cod sursa (job #673399) | Cod sursa (job #1966566)
# include <fstream>
# include <cstring>
# define DIM 2000010
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
char aux[DIM],a[DIM];
int d[DIM],n,i,j,t,mij,dr;
long long sol;
int main () {
fin>>aux+1;
n=strlen(aux+1);
for(i=1;i<=n;i++)
a[2*i-1]=aux[i];
for(i=2;i<=2*n-1;i+=2)
a[i]=98;
n=2*n-1;
mij=1;
dr=1;
sol=2;
d[1]=2;
d[n]=2;
d[0]=1;
d[n+1]=1;
a[0]=98;
a[n+1]=98;
for(i=2;i<n;i++){
if(i>dr){
for(j=i,t=i;j>=0&&t<=n+1&&a[t]==a[j];j--,t++,d[i]++);
sol+=d[i]/2;
mij=i;
dr=t-1;
continue;
}
d[i]=min(d[2*mij-i],dr-i+1);
if(d[i]==dr-i+1){
for(t=dr+1,j=i-d[i];j>=0&&t<=n+1&&a[t]==a[j];j--,t++,d[i]++);
mij=i;
dr=t-1;
}
sol+=d[i]/2;
}
fout<<sol<<"\n";
return 0;
}