标签:
题意:小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转 换使小明的串和小西的变成同一个,那么他们两个人都会很开心。这里魔法指的是小明的串可以任意删掉某个字符,或者把某些字符对照字符变化表变化。如:
小西的串是 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 }
标签:
原文地址:http://www.cnblogs.com/cnblogs321114287/p/4570437.html