Submission #33608140
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
#define per(i,a,n) for (ll i=n;i-->(ll)a;)
ll read(){ll r;scanf("%lld",&r);return r;} // read
const int INF = 0x3f3f3f3f;
const int maxc = 'z' - 'a';
vector<int> t;
int f[60][60][60][60]; // [l..r] => a[k][0...i] (prefix(a[k][i]))
int dp[60][60][30]; // [l..r] => char c
int c[60];
vector<int> a[60]; // c[i] -> a[i];
vector<pair<int,int> > c2c; // 单字符映射
int ns,nt;
int K ;
char tmp[60];
int lcStr2VecInt(vector<int> & res){ // lower case string to vector<int>
scanf("%s", tmp);
int sz = strlen(tmp);
res.resize(sz);
rep(i,0,sz) res[i] = tmp[i] - 'a'; // s 放在 c[0],a[0]
return sz;
}
void setMin(int &v0,int v1){v0 = min(v0,v1);}
int main(){
c[0] = maxc + 1; // 不存在的字符
ns = lcStr2VecInt(a[0]); // s 放在 c[0],a[0]
nt = lcStr2VecInt(t); // t
K = read() + 1; // 包含s
rep(i,1,K){
scanf("%s", tmp);
char ch = c[i] = tmp[0] - 'a';
if(lcStr2VecInt(a[i]) == 1) c2c.push_back({ch, a[i][0]});
}
// rep(i,0,K){
// printf("c,a : %d -> ",c[i]);
// for(auto v:a[i]) printf("%d ",v);
// printf("\n");
// }
// for(auto [c0,c1]:c2c) printf("c2c:%d -> %d\n",c0,c1);
rep(l,0,nt) {
rep(r,l,nt) {
rep(k,0,K) rep(i,0,50) f[l][r][k][i] = INF;
rep(c,0,maxc+1) dp[l][r][c] = INF;
}
dp[l][l][t[l]] = 0; // 本身就是字符
}
// --- init ---
per(l,0,nt) rep(r,l,nt){ // T[l..r]
rep(k,0,K){
int sz = a[k].size();
rep(i,1,sz){ // T[l..j][j+1..r] = > a[k][0..i-1],a[k][i]
int &ans = f[l][r][k][i];
rep(j,l,r) setMin(ans, f[l][j][k][i-1] + dp[j+1][r][a[k][i]]);
if(i == sz - 1) setMin(dp[l][r][c[k]], ans + 1); // T[i..j] => a[k] => c[k]
}
}
// dp[l][r][c] = min( dp[l][r][k][|a[k]|]) + 1 = min(len > 1(上面算了), len = 1) + 1, len = |a[k]|
// 26 次 松弛
rep(c,0,maxc+1) for(auto [c0, c1]: c2c) setMin(dp[l][r][c0], dp[l][r][c1] + 1);
// 更新 f 中首字母
rep(k,0,K) setMin(f[l][r][k][0], dp[l][r][a[k][0]]);
}
printf("%d\n", f[0][nt-1][0][ns-1] == INF? -1:f[0][nt-1][0][ns-1] );
return 0;
}
Submission Info
Submission Time |
|
Task |
G - Replace |
User |
cromarmot |
Language |
C++ (GCC 9.2.1) |
Score |
600 |
Code Size |
2188 Byte |
Status |
AC |
Exec Time |
43 ms |
Memory |
22152 KiB |
Compile Error
./Main.cpp: In function ‘ll read()’:
./Main.cpp:8:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
8 | ll read(){ll r;scanf("%lld",&r);return r;} // read
| ~~~~~^~~~~~~~~~~
./Main.cpp: In function ‘int lcStr2VecInt(std::vector<int>&)’:
./Main.cpp:27:8: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
27 | scanf("%s", tmp);
| ~~~~~^~~~~~~~~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:42:10: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
42 | scanf("%s", tmp);
| ~~~~~^~~~~~~~~~~
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
600 / 600 |
Status |
|
|
Set Name |
Test Cases |
Sample |
example_00.txt, example_01.txt, example_02.txt |
All |
example_00.txt, example_01.txt, example_02.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, random_32.txt, random_33.txt, random_34.txt, random_35.txt, random_36.txt, random_37.txt, random_38.txt, random_39.txt, random_40.txt, random_41.txt, random_42.txt, random_43.txt, random_44.txt |
Case Name |
Status |
Exec Time |
Memory |
example_00.txt |
AC |
7 ms |
3776 KiB |
example_01.txt |
AC |
2 ms |
3868 KiB |
example_02.txt |
AC |
7 ms |
3720 KiB |
hand_00.txt |
AC |
15 ms |
17180 KiB |
hand_01.txt |
AC |
10 ms |
10112 KiB |
hand_02.txt |
AC |
2 ms |
3868 KiB |
hand_03.txt |
AC |
10 ms |
10012 KiB |
hand_04.txt |
AC |
2 ms |
3872 KiB |
hand_05.txt |
AC |
2 ms |
3724 KiB |
random_00.txt |
AC |
8 ms |
9616 KiB |
random_01.txt |
AC |
10 ms |
7820 KiB |
random_02.txt |
AC |
12 ms |
10932 KiB |
random_03.txt |
AC |
25 ms |
16028 KiB |
random_04.txt |
AC |
35 ms |
21424 KiB |
random_05.txt |
AC |
42 ms |
21632 KiB |
random_06.txt |
AC |
38 ms |
21976 KiB |
random_07.txt |
AC |
8 ms |
9736 KiB |
random_08.txt |
AC |
2 ms |
3824 KiB |
random_09.txt |
AC |
17 ms |
11804 KiB |
random_10.txt |
AC |
19 ms |
16632 KiB |
random_11.txt |
AC |
37 ms |
21952 KiB |
random_12.txt |
AC |
38 ms |
21988 KiB |
random_13.txt |
AC |
40 ms |
22084 KiB |
random_14.txt |
AC |
2 ms |
3728 KiB |
random_15.txt |
AC |
2 ms |
3768 KiB |
random_16.txt |
AC |
14 ms |
12408 KiB |
random_17.txt |
AC |
21 ms |
15852 KiB |
random_18.txt |
AC |
37 ms |
21360 KiB |
random_19.txt |
AC |
20 ms |
16864 KiB |
random_20.txt |
AC |
43 ms |
22152 KiB |
random_21.txt |
AC |
2 ms |
3816 KiB |
random_22.txt |
AC |
2 ms |
3672 KiB |
random_23.txt |
AC |
15 ms |
9676 KiB |
random_24.txt |
AC |
27 ms |
17184 KiB |
random_25.txt |
AC |
38 ms |
22088 KiB |
random_26.txt |
AC |
2 ms |
3672 KiB |
random_27.txt |
AC |
38 ms |
21924 KiB |
random_28.txt |
AC |
32 ms |
21980 KiB |
random_29.txt |
AC |
25 ms |
20144 KiB |
random_30.txt |
AC |
23 ms |
22052 KiB |
random_31.txt |
AC |
35 ms |
21988 KiB |
random_32.txt |
AC |
24 ms |
21844 KiB |
random_33.txt |
AC |
27 ms |
21908 KiB |
random_34.txt |
AC |
28 ms |
22000 KiB |
random_35.txt |
AC |
28 ms |
21996 KiB |
random_36.txt |
AC |
33 ms |
21920 KiB |
random_37.txt |
AC |
26 ms |
22052 KiB |
random_38.txt |
AC |
22 ms |
22028 KiB |
random_39.txt |
AC |
20 ms |
22036 KiB |
random_40.txt |
AC |
19 ms |
22116 KiB |
random_41.txt |
AC |
20 ms |
21976 KiB |
random_42.txt |
AC |
2 ms |
3740 KiB |
random_43.txt |
AC |
2 ms |
3924 KiB |
random_44.txt |
AC |
24 ms |
21888 KiB |