#9WA#10TLE求调
查看原帖
#9WA#10TLE求调
342185
__builtin_orz楼主2024/7/28 16:03
#include <stdio.h>
#include <string.h>
char tb[105][25], psw[105], ptb[105][25];
int n;
size_t len[105], slen;
bool ok[105];
int word[105];
int nxt[105];
char a2d(char c) {
  switch (c) {
    case 'a':
    case 'b':
    case 'c':
      return '1';
    case 'd':
    case 'e':
    case 'f':
      return '2';
    case 'g':
    case 'h':
    case 'i':
      return '3';
    case 'j':
    case 'k':
    case 'l':
      return '4';
    case 'm':
    case 'n':
      return '5';
    case 'o':
    case 'p':
    case 'q':
      return '6';
    case 'r':
    case 's':
    case 't':
      return '7';
    case 'u':
    case 'v':
    case 'w':
      return '8';
    case 'x':
    case 'y':
    case 'z':
      return '9';
    default:
      return EOF;
  }
}
int main() {
  scanf("%d%s", &n, psw + 1);
  slen = strlen(psw + 1);
  for (int i = 1; i <= n; i++) {
    scanf("%s", tb[i] + 1);
    len[i] = strlen(tb[i] + 1);
    for (int j = 1; j <= len[i]; j++) ptb[i][j] = a2d(tb[i][j]);
  }
  ok[0] = true;
  for (int i = 1; i <= slen; i++) {
    for (int j = 1; j <= n; j++) {
      if (i >= len[j] && ok[i - len[j]] &&
          !strncmp(psw + i - len[j] + 1, ptb[j] + 1, len[j])) {
        ok[i] = true;
        nxt[i - len[j]] = i;
        word[i] = j;
      }
    }
  }
  if (!ok[slen])
    printf("No Solutions!");
  else {
    int x = 0;
    do {
      x = nxt[x];
      printf(tb[word[x]] + 1);
      if (x != slen) printf(" ");
    } while (x != slen);
  }
  return 0;
}
2024/7/28 16:03
加载中...