题干:
一天,ikki在看书的时候发现书上有个类似于家谱状的插图,突然ikki想到了一个有趣的现象:有时候用某个人一连串
的关系描述另一个人的时候,最后可能还是他本身。例如:小明的爸爸的爸爸和小明的爷爷是同一个人。
现在ikki给你出了个题目:如果用关于小明的一连串的关系去描述两个人,最后这两个人是否是同一个人呢?
Input
多组测试数据。第一行一个正整数T表示数据的组数。
对于每组测试数据,输入两行长度不超过40的字符串来描述两个人和小明的关系,关系表示一共有6种
方式:’F’表示爸爸,’M’表示妈妈,’P’表示爷爷,’Q’表示奶奶,’K’表示外公,’G’表示外婆。
Output
对于每组数据,如果描述的是同一个人输出YES,否则输出NO,每组输出占一行。
Sample Input
2
PFMMF
FFFGF
KMFFMM
MFFFQM
Sample Output
YES
NO
解题报告:
思路就是把爷爷奶奶姥姥姥爷拆成FF等等。。。就是把两辈关系拆开,,就解决了。
AC代码:
#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
char s1[55],s2[55];
char q1[1000],q2[1000];
int top1,top2;
int main()
{int t;cin>>t;while(t--) {scanf("%s",s1);scanf("%s",s2);top1 = top2 = -1;for(int i = 0; i<strlen(s1); i++) {if(s1[i] == 'P') {q1[++top1] = 'F';q1[++top1] = 'F';}else if (s1[i] == 'Q') {q1[++top1] = 'F';q1[++top1] = 'M';}else if(s1[i] == 'K') {q1[++top1] = 'M';q1[++top1] = 'F';}else if(s1[i] == 'G') {q1[++top1] = 'M';q1[++top1] = 'M';}else q1[++top1] = s1[i];}for(int i = 0; i<strlen(s2); i++) {if(s2[i] == 'P') {q2[++top2] = 'F';q2[++top2] = 'F';}else if (s2[i] == 'Q') {q2[++top2] = 'F';q2[++top2] = 'M';}else if(s2[i] == 'K') {q2[++top2] = 'M';q2[++top2] = 'F';}else if(s2[i] == 'G') {q2[++top2] = 'M';q2[++top2] = 'M';}else q2[++top2] = s2[i];}q1[++top1] = '\0';q2[++top2] = '\0';if(!strcmp(q1,q2)) puts("YES");else puts("NO");}return 0 ;
}
编辑时间记录:这题我记得是当校赛出来着所以私密了一下: