Cod sursa(job #928786)

Utilizator ion824Ion Ureche ion824 Data 26 martie 2013 18:11:41
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>
#include<algorithm>
#include<string>
using namespace std;
string s;
int d[2000005];
 
int main(){
    ifstream cin("pscpld.in");
    ofstream cout("pscpld.out");
    int l,i,j,ll,p; long long sol=0LL;
    getline(cin,s); l=s.length(); s=" "+s;
    s.resize(2*l+1);
    for(i=l;i>0;--i){ s[i*2]=' '; s[i*2-1]=s[i]; }
        
    l=2*l-1; ll=0; p=0; d[0]=1;
    
    for(i=1;i<=l;++i){
       
      d[i]=1;
      if(i<=ll)
         d[i]=min(d[2*p-i],ll-i+1);                    
               
      j=i+d[i];                  
      while(2*i-j>=0 && j<=l && s[2*i-j]==s[j])++j;     
      --j;
      
      d[i]=j-i+1;
      
      if(i+d[i]-1>ll){ ll=i+d[i]-1; p=i; }
      
      if(i&1) sol+=(d[i]+1)/2;
        else sol+=(d[i]/2);                                       
    }
     
    cout<<sol;
 return 0;  
}