Codeforces 1092C Prefixes and Suffixes(思维)

时间:2023-03-09 06:19:30
Codeforces 1092C Prefixes and Suffixes(思维)

题目链接:Prefixes and Suffixes

题意:给定未知字符串长度n,给出2n-2个字符串,其中n-1个为未知字符串的前缀(n-1个字符串长度从1到n-1),另外n-1个为未知字符串的后缀(n-1个字符串长度从1到n-1),判断这2n-2个字符串分别为前缀还是后缀。

题解:从2n-2从找个n-1长度的字符串和1长度的字符串拼接,判断该字符串是否符合要求,能作为未知字符串。符合的话,直接输出答案。

 #include <set>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <cmath>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std; #define eps 1e-8
#define pb push_back
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define clr(a,b) memset(a,b,sizeof(a)
#define FAST_IO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) typedef long long ll;
typedef unsigned long long ull;
int n,m;
string str[];
map <string,int> M; void solve(string s){
for(int i=;i<=m;i++){
bool ok=;
int sz=str[i].size();
if(s.substr(,sz)==str[i]) ok=;
if(s.substr(n-sz)==str[i]) ok=;
if(!ok) return ;
}
for(int i=;i<=m;i++){
int sz=str[i].size();
if(s.substr(,sz)==str[i]&&s.substr(n-sz)==str[i]){
if(M[str[i]]) cout<<"S",M[str[i]]=;
else cout<<"P",M[str[i]]=;
}
else if(s.substr(n-sz)==str[i]) cout<<"S";
else if(s.substr(,sz)==str[i]) cout<<"P";
}
cout<<endl;
exit();
} int main(){
FAST_IO;
cin>>n;
m=*n-;
for(int i=;i<=m;i++) cin>>str[i];
for(int i=;i<=m;i++){
for(int j=;j<=m;j++){
if(str[i].size()==n-&&str[j].size()==)
solve(str[i]+str[j]);
}
}
return ;
}