Submission #1196312

#TimeUsernameProblemLanguageResultExecution timeMemory
1196312PetrixNecklace (Subtask 4) (BOI19_necklace4)C++20
15 / 15
231 ms652 KiB
#include <iostream>
#include <algorithm>
using namespace std;

string a,b;
int v[2][7001];
int p[7001];

void kmp(string s1,string s2,int poz1) {
    int i,poz;string s=s1+'#'+s2;
    for(i=1;i<=7000;i++) v[poz1][i]=0;
    for(i=1;i<s.size();i++){
        poz=p[i-1];
        while(poz>0 && s[i]!=s[poz]) poz=p[poz-1];
        if(s[i]==s[poz]) poz++;
        p[i]=poz;
        if(i>s1.size()) v[poz1][i-s1.size()]=p[i];
    }
}

int main()
{
    string s1,s2,auxs1,auxb;
    int aux,i,j,rasp=-1,raspa,raspb;
    cin>>a>>b;
    for(aux=0;aux<2;aux++){
        for(i=0;i<=a.size();i++){
            s1=a.substr(0,i);s2=a.substr(i,a.size()-i);auxs1=s1;auxb=b;
            reverse(auxs1.begin(),auxs1.end());
            reverse(auxb.begin(),auxb.end());
            kmp(auxs1,b,0);
            kmp(s2,auxb,1);
            for(j=1;j<=b.size();j++){
                if(v[0][j]+v[1][b.size()-j]>rasp){
                    rasp=v[0][j]+v[1][b.size()-j];
                    raspa=i-v[0][j];
                    if(aux) raspb=b.size()-j-v[1][b.size()-j];
                    else raspb=j-v[0][j];
                }
            }
        }
        reverse(b.begin(), b.end());
    }
    cout<<rasp<<"\n"<<raspa<<" "<<raspb;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...