Submission #448139

#TimeUsernameProblemLanguageResultExecution timeMemory
448139jk410Bajka (COCI20_bajka)C++17
70 / 70
113 ms696 KiB
#include <bits/stdc++.h>
using namespace std;
const int INF=1e9;
int N,M,Ans=INF;
int D[300][300];
string A,B;
int d(int idx,int to){
    if (to==M)
        return 0;
    int &r=D[idx][to];
    if (r!=-1)
        return r;
    r=INF;
    for (int i=0; i<N; i++){
        if (A[i]!=A[idx])
            continue;
        for (int j:{-1,1}){
            if (i+j<0||i+j==N||A[i+j]!=B[to])
                continue;
            r=min(r,d(i+j,to+1)+abs(idx-i)+1);
        }
    }
    return r;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    memset(D,-1,sizeof(D));
    cin>>N>>M>>A>>B;
    for (int i=0; i<N; i++){
        if (A[i]==B[0])
            Ans=min(Ans,d(i,1));
    }
    if (Ans==INF)
        cout<<-1;
    else
        cout<<Ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...