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
AC × 3
AC × 54
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