1. 程式人生 > >1623】Relation(思維模擬,拆解字串)

1623】Relation(思維模擬,拆解字串)

題幹:

 一天,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 ;
}