hdu 4545 贪心 *

题意:小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转 换使小明的串和小西的变成同一个,那么他们两个人都会很开心。这里魔法指的是小明的串可以任意删掉某个字符,或者把某些字符对照字符变化表变化。如:
    小西的串是 abba;
    小明的串是 addba;
    字符变化表 d b (表示d能转换成b)。
  那么小明可以通过删掉第一个d,然后将第二个d转换成b将串变成abba。

  现在请你帮忙判断:他们能不能通过魔法转换使两个人的串变成一样呢?

链接:点我

贪心即可,每次找出s2中和1匹配的

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****
");
15 const int MAXN=1005;
16 int n,m,tt;
17 int g[27][27];
18 char s1[MAXN],s2[MAXN];
19 int main()
20 {
21     int i,j,k;
22     #ifndef ONLINE_JUDGE
23     freopen("1.in","r",stdin);
24     #endif
25     int ca=0;
26     scanf("%d",&tt);
27     while(tt--)
28     {
29         ca++;
30         char c1[30],c2[30];
31         cl(g);
32         scanf("%s%s",s1,s2);
33         int len1=strlen(s1);
34         int len2=strlen(s2);
35         scanf("%d",&n);
36         for(i=0;i<n;i++)
37         {
38             scanf("%s",c1);
39             scanf("%s",c2);
40             g[c1[0]-'a'][c2[0]-'a']=1;
41         }
42         i=0;j=0;
43         while(i<len1&&j<len2)
44         {
45             if(s1[i]==s2[j]||g[s2[j]-'a'][s1[i]-'a'])
46             {
47                 i++,j++;
48             }
49             else
50             {
51                 j++;
52             }
53         }
54         if(i==len1)
55         {
56             printf("Case #%d: happy
",ca);
57         }
58         else
59         {
60             printf("Case #%d: unhappy
",ca);
61         }
62     }
63     return 0;
64 }
原文地址:https://www.cnblogs.com/cnblogs321114287/p/4570437.html