結果
問題 | No.422 文字列変更 (Hard) |
ユーザー | latte0119 |
提出日時 | 2016-09-09 23:19:47 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 54 ms / 3,000 ms |
コード長 | 1,966 bytes |
コンパイル時間 | 1,451 ms |
コンパイル使用メモリ | 166,568 KB |
実行使用メモリ | 138,760 KB |
最終ジャッジ日時 | 2024-04-28 14:07:01 |
合計ジャッジ時間 | 3,043 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 12 ms
38,348 KB |
testcase_01 | AC | 48 ms
124,168 KB |
testcase_02 | AC | 49 ms
122,328 KB |
testcase_03 | AC | 45 ms
122,232 KB |
testcase_04 | AC | 47 ms
124,092 KB |
testcase_05 | AC | 51 ms
124,424 KB |
testcase_06 | AC | 54 ms
138,760 KB |
testcase_07 | AC | 12 ms
37,588 KB |
testcase_08 | AC | 32 ms
137,624 KB |
testcase_09 | AC | 52 ms
134,664 KB |
testcase_10 | AC | 54 ms
138,756 KB |
testcase_11 | AC | 48 ms
124,040 KB |
testcase_12 | AC | 45 ms
122,148 KB |
testcase_13 | AC | 46 ms
124,172 KB |
testcase_14 | AC | 46 ms
124,208 KB |
testcase_15 | AC | 47 ms
124,076 KB |
testcase_16 | AC | 47 ms
122,296 KB |
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long typedef vector<int>vint; typedef pair<int,int>pint; typedef vector<pint>vpint; #define rep(i,n) for(int i=0;i<(n);i++) #define reps(i,f,n) for(int i=(f);i<(n);i++) #define all(v) (v).begin(),(v).end() #define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++) #define pb push_back #define fi first #define se second template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;} template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;} int N,M; string S,T; int dp[1201][1201][3]; tuple<int,int,int>pre[1201][1201][3]; void a(int i,int j,int k,int ii,int jj,int kk,int c){ if(dp[i][j][k]>=dp[ii][jj][kk]+c){ dp[i][j][k]=dp[ii][jj][kk]+c; pre[i][j][k]=make_tuple(ii,jj,kk); } } signed main(){ cin>>N>>M; cin>>S>>T; fill_n(**dp,1201*1201*3,1001001001001001001ll); dp[0][0][0]=0; for(int i=0;i<=N;i++){ for(int j=0;j<=M;j++){ if(i<N){ a(i+1,j,1,i,j,1,2); a(i+1,j,0,i,j,1,2); a(i+1,j,1,i,j,0,9); a(i+1,j,0,i,j,0,9); } if(j<M){ a(i,j+1,2,i,j,2,2); a(i,j+1,0,i,j,2,2); a(i,j+1,2,i,j,0,9); a(i,j+1,0,i,j,0,9); } if(i<N&&j<M){ a(i+1,j+1,0,i,j,0,S[i]==T[j]?0:5); } } } cout<<dp[N][M][0]<<endl; string SS,TT; int i=N,j=M,k=0; while(i>0||j>0){ int ii,jj,kk; tie(ii,jj,kk)=pre[i][j][k]; if(ii<i&&jj<j){ SS+=S[ii]; TT+=T[jj]; } else if(ii<i){ SS+=S[ii]; TT+='-'; } else if(jj<j){ SS+='-'; TT+=T[jj]; } i=ii;j=jj;k=kk; } reverse(all(SS));reverse(all(TT)); cout<<SS<<endl; cout<<TT<<endl; return 0; }