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("*****\n");

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\n",ca);

57         }

58         else

59         {

60             printf("Case #%d: unhappy\n",ca);

61         }

62     }

63     return 0;

64 }

 

你可能感兴趣的:(HDU)