• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LyonLys
愿意在角落唱沙哑的歌 再大声也都是给你 请用心听 不要说话 Contact me via E-mail: lyon.lys@gmail.com
博客园    首页    新随笔    联系   管理    订阅  订阅

LA 5844 Leet (dfs 搜索)

ACM-ICPC Live Archive

  题意是判断两个字符串是否相同,相同的意思是将第一个串相应的字符用对应的字符串代替,如果能得到第二个串,那么就是相同。

  因为代替的字符串最长只有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

 

 

posted @ 2013-02-23 18:46  LyonLys  阅读(213)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3