답안 #870575

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
870575 2023-11-08T11:00:42 Z epicci23 Bajka (COCI20_bajka) C++17
0 / 70
2 ms 604 KB
#include "bits/stdc++.h"
using namespace std;
#define pb push_back
#define endl "\n" 
#define int long long
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()

/* stuff you should look for
 * int overflow, array bounds
 * special cases (n=1?)
 * do smth instead of nothing and stay organized
 * WRITE STUFF DOWN
 * DON'T GET STUCK ON ONE APPROACH
 * SIMPLIFY THE PROBLEM
 * READ THE STATEMENT CAREFULLY
  !!! if there is an specified/interesting smth(i.e. constraint) in the statement,
  then you must be careful about that   
*/

const int INF = 1e18;

int dp[105][105];
int vis[105][105];
int n,m;
string s,t;

int f(int a,int b){
  if(a==m) return 0;
  if(dp[a][b]!=INF) return dp[a][b];
  if(vis[a][b]) return INF;
  vis[a][b]=1;
  int cevv=INF;
  
  if(b>0 && s[b-1]==t[a]) cevv=min(cevv,f(a+1,b-1)+1);
  if(b+1<n && s[b+1]==t[a]) cevv=min(cevv,f(a+1,b+1)+1);

  for(int i=0;i<n;i++) if(s[i]==s[b]) cevv=min(cevv,f(a,i)+abs(b-i));
  
  return dp[a][b]=cevv;
}

void solve(){
 
 cin >> n >> m;
 
 cin >> s >> t;
 
 for(int i=0;i<=100;i++){
   for(int j=0;j<=100;j++){
   	dp[i][j]=INF;
   }
 }

 int ans=INF;

 for(int i=0;i<n;i++){
 	if(s[i]==t[0]){
      ans=min(ans,f(1,i));
 	}
 }
 

 if(ans>1000000LL) cout << -1 << endl;
 else cout << ans << endl;

}

int32_t main(){

  cin.tie(0); ios::sync_with_stdio(0);
  
  int t=1;//cin >> t;
  while(t--) solve();

  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Incorrect 0 ms 604 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -