+1学姐在线嘤嘤嘤

Description

 

众所周知,+1学姐人美心好又聪明,但就是没有男朋友,你说气不气。这也正常,成为她的男朋友必须要答对她的问题才行,你想接受挑战吗?今天,+1学姐给出的问题是:有一个长度为n的字符串,告诉你该字符串的n-1个前缀子字符串,和n-1个后缀子字符串,为了增加难度,+1学姐给出的顺序是乱的,她要让你回答这2*n-2 个字符串是前缀的还是后缀的,若该字符串为前缀的,回答‘P’,若为后缀的,回答‘S’。你想成为+1学姐的男朋友吗?那就A了这道题吧。例如:字符串abcd,前缀子字符串为:a, ab, abc 后缀子字符串为:d, cd, bcd.

Input

 

输入的第一行包含一个整数n(2<=n<=100),原始字符串的长度。

接下来的2n-2行,每行有一个字符串,是原始字符串的前缀或后缀。

给出的每一个字符串的的长度都为1到n-1,保证每个长度的字符串有两个,且由小写字母组成,给出的顺序是任意的。

Output

 

输出一个长度为2n-2,且仅由字符‘P’和‘S’组成的字符串。按顺序输出,若给出的第k个字符串为前缀的,那么输出的字符串第k个应为'P'.答案保证唯一。

Sample Input 1 

4
cd
abc
a
bcd
d
ab

Sample Output 1

SPPSSP

Hint

样例中原始字符串为:abcd.前缀的:a, ab, abc后缀的:d, cd, bcd所以输出:SPPSSP

思路:先把首尾两个字母找出来,如何还原串,在find子串

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm> 
using namespace std;
string s[205];
int P[40],S[40],l[205];
queue<char> q1,q2;
bool vis[30];
int main() {
	int n;
	scanf("%d",&n);
	for(int i=1; i<=2*n-2; i++) {
		cin>>s[i];
		l[i]=s[i].size();
		P[s[i][0]-'a']++;
		S[s[i][l[i]-1]-'a']++;
	}
	for(int i=0; i<26; i++) {
		if(P[i]>=n-1) q1.push('a'+i);
		if(S[i]>=n-1) q2.push('a'+i);
	}
	char a,b;
	if(q1.size()==1&&q2.size()>1) {
		a=q1.front();
		vis[a-'a']=true;
		while(!q2.empty()){
			char t=q2.front();
			q2.pop();
			if(!vis[t-'a']){
				b=t;
				break;
			}
		}
	}
	else if(q2.size()==1&&q1.size()>1) {
		b=q2.front();
		vis[b-'a']=true;
		while(!q1.empty()){
			char t=q1.front();
			q1.pop();
			if(!vis[t-'a']){
				a=t;
				break;
			}
		}
	}
	else{
		a=q1.front();
		b=q2.front();
	}
	string sss;
	for(int i=1;i<=2*n-2;i++){
		if(l[i]==n-1&&s[i][0]==a){
			sss=s[i]+b;
			break;
		}
	}
	for(int i=1;i<=2*n-2;i++){
		if(sss.find(s[i])==0)
		printf("P");
		else
		printf("S");
	}
    return 0;
}