제출 #1347133

#제출 시각아이디문제언어결과실행 시간메모리
1347133jumpBajka (COCI20_bajka)C++20
20 / 70
2 ms344 KiB
#include <bits/stdc++.h>
#define int long long
int last[26];
int lastRev[26];
int dp[310];
int olddp[310];
signed main(){
	int n,m;
	std::cin >> n >> m;
	std::string s1,s2;
	std::cin >> s1 >> s2;
	bool f=true;
	for(auto character:s2){
		int target = character-'a';
		for(int i=0;i<26;i++)last[i]=1e18,lastRev[i]=1e18;
		for(int i=s1.size()-1;i>=0;i--){
			dp[i]=1e18;
			int current = s1[i]-'a';
			lastRev[current]=std::min(lastRev[current],olddp[i]);
			olddp[i]=std::min(olddp[i],lastRev[current]);
			for(int l=0;l<26;l++)lastRev[l]+=1;
		}
		for(int i=0;i<s1.size();i++){
			int current = s1[i]-'a';
			last[current]=std::min(last[current],olddp[i]);
			olddp[i]=std::min(olddp[i],lastRev[current]);
			for(int l=0;l<26;l++)last[l]+=1;
		}
		for(int i=0;i<s1.size();i++){
			int current = s1[i]-'a';
			if(current==target){
				if(i!=s1.size()-1)
				dp[i]=std::min(dp[i],1+olddp[i+1]);
				if(i!=0)
				dp[i]=std::min(dp[i],1+olddp[i-1]);
				if(f)dp[i]=0;
			}
		}
		for(int i=0;i<s1.size();i++)olddp[i]=dp[i];
		// for(int i=0;i<s1.size();i++){
		// 	std::cout << ((olddp[i]!=1e18)?olddp[i]:-1 )<<' '<< ((dp[i]!=1e18)?dp[i]:-1) << '|';
		// }std::cout << '\n';
		f=false;
	}
	int min=1e18;
	for(int i=0;i<s1.size();i++){
		min=std::min(min,dp[i]);
	}
	if(min>=1e18)min=-1;
	std::cout << min;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...