题意是判断两个字符串是否相同,相同的意思是将第一个串相应的字符用对应的字符串代替,如果能得到第二个串,那么就是相同。
因为代替的字符串最长只有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