题意是判断两个字符串是否相同,相同的意思是将第一个串相应的字符用对应的字符串代替,如果能得到第二个串,那么就是相同。
因为代替的字符串最长只有3,所以可以简单的用搜索解决。
代码如下:
View Code
1 #define REP(i, n) for (int i = 0; i < (n); i++) 2 3 char sub[30][5]; 4 char buf[20], leet[100]; 5 int mx; 6 7 bool dfs(char *x, char *y) { 8 if (!*x && !*y) return true; 9 if (!*x || !*y) return false;10 char *t = sub[*x - 'a'];11 if (*t) {12 while (*t) {13 if (*t == *y) t++, y++;14 else return false;15 }16 return dfs(x + 1, y);17 } else {18 REP(i, mx) {19 *(t++) = *(y++);20 *t = 0;21 if (dfs(x + 1, y)) return true;22 if (!*y) break;23 }24 sub[*x - 'a'][0] = 0;25 return false;26 }27 }28 29 int main() {30 int T;31 scanf("%d", &T);32 while (T-- && ~scanf("%d", &mx)) {33 _clr(sub);34 scanf("%s%s", buf, leet);35 printf("%d\n", dfs(buf, leet));36 }37 return 0;38 }
——written by Lyon