Cod sursa(job #2901958)

Utilizator vladdobro07vladdd vladdobro07 Data 14 mai 2022 22:36:42
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
using namespace std;
ifstream cin("pscpld.in");
ofstream cout("pscpld.out");
int mn[2000005];
string s="*";
int main() {
        long long S=0;
        int L=-1,R=-1,m,mp,st=-1,dr=-1,left;
        char c;
        while(cin>>c) {
                s+=c;
                s+='*';
        }
        //cout<<s;
        for(int i=0; i<s.size(); i++) {
                if(i>R) {
                        st=dr=i;
                        while(st>0&&dr<s.size()-1&&(s[st-1]==s[dr+1])) {
                                mn[i]++;
                                st--;
                                dr++;
                        }
                        L=st;
                        R=dr;
                } else {
                        m=(L+R)/2;
                        mp=2*m-i;
                        left=R-i;
                        if(mn[mp]<left)
                                mn[i]=mn[mp];
                        else {
                                mn[i]=R-i;
                                dr=R;
                                st=2*i-R;
                                while(st>0&&dr<s.size()-1&&(s[st-1]==s[dr+1])) {
                                        mn[i]++;
                                        st--;
                                        dr++;
                                }
                                L=st;
                                R=dr;
                        }
                }
        }
        for(int i=0; i<s.size(); i++)
                S+=mn[i]/2;
        cout<<S+s.size()/2;
        return 0;
}