Cod sursa(job #3168669)

Utilizator andyexistsSuna Andrei andyexists Data 12 noiembrie 2023 23:38:39
Problema PScPld Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <iostream>
#include <fstream>

using namespace std;
string s;
int v[2000005];
void build(string ohio)
{
    s="";
    s+='#';
    for (int i=0; i<ohio.size(); i++)
    {
        s+=ohio[i];
        s+='#';
    }
    return;
}
void man_acher()
{
    int mirror=0;
    int reflection=0;
    int l=0;
    int pos=1;
    v[0]=1;
    for (int i=1; i<s.size(); i++)
    {
        pos=i;
        reflection=mirror-(pos-mirror);
        if (pos>mirror+(v[mirror]/2))
        {
            mirror=pos;
            v[mirror]=1; l=1;
            while (l>=0&&l<s.size()&&s[mirror-l]==s[mirror+l])
            {
                v[mirror]+=2;
                l++;
            }
            ///cout<<"HM";
        }
        else if ((reflection-(v[reflection]/2))>(mirror-(v[mirror]/2)))
            v[pos]=v[reflection];
        else if ((reflection-(v[reflection]/2))<(mirror-(v[mirror]/2)))
            v[pos]=(reflection-(mirror-(v[mirror]/2)))*2+1;
        else if ((reflection-(v[reflection]/2))==(mirror-(v[mirror]/2)))
        {
            ///cout<<"OH";
            mirror=pos;
            v[mirror]=v[reflection]; l=v[mirror]/2+1;
            while (l>=0&&l<s.size()&&s[mirror-l]==s[mirror+l])
            {

                v[mirror]+=2;
                l++;
            }
        }
        ///cout<<"AH"<<mirror<<'\n';
    }
    return;
}
int main()
{
    ifstream cin ("pscpld.in");
    ofstream cout ("pscpld.out");
    string input;
    cin>>input;
    build (input);
    for (int i=0; i<s.size(); i++)
    {
        cout<<s[i];
    }
    cout<<'\n';
    man_acher();
    for (int i=0; i<s.size(); i++)
    {
        cout<<v[i]<<" ";
    }
}