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长度的字符串拼接,判断该字符串是否符合要求,能作为未知字符串。符合的话,直接输出答案。

 1 #include <set>
 2 #include <map>
 3 #include <queue>
 4 #include <deque>
 5 #include <stack>
 6 #include <cmath>
 7 #include <cstdio>
 8 #include <vector>
 9 #include <string>
10 #include <cstring>
11 #include <fstream>
12 #include <iostream>
13 #include <algorithm>
14 using namespace std;
15 
16 #define eps 1e-8
17 #define pb push_back
18 #define PI acos(-1.0)
19 #define INF 0x3f3f3f3f
20 #define clr(a,b) memset(a,b,sizeof(a)
21 #define FAST_IO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
22 
23 typedef long long ll;
24 typedef unsigned long long ull;
25 int n,m;
26 string str[234];
27 map <string,int> M;
28 
29 void solve(string s){
30     for(int i=1;i<=m;i++){
31         bool ok=0;
32         int sz=str[i].size();
33         if(s.substr(0,sz)==str[i]) ok=1;
34         if(s.substr(n-sz)==str[i]) ok=1;
35         if(!ok) return ;
36     }
37     for(int i=1;i<=m;i++){
38         int sz=str[i].size();
39         if(s.substr(0,sz)==str[i]&&s.substr(n-sz)==str[i]){
40             if(M[str[i]]) cout<<"S",M[str[i]]=0;
41             else cout<<"P",M[str[i]]=1;
42         }
43         else if(s.substr(n-sz)==str[i]) cout<<"S";
44         else if(s.substr(0,sz)==str[i]) cout<<"P";
45     }
46     cout<<endl;
47     exit(0);
48 }
49 
50 int main(){
51     FAST_IO;
52     cin>>n;
53     m=2*n-2;
54     for(int i=1;i<=m;i++) cin>>str[i];
55     for(int i=1;i<=m;i++){
56         for(int j=1;j<=m;j++){
57             if(str[i].size()==n-1&&str[j].size()==1)
58             solve(str[i]+str[j]);
59         }
60     }
61     return 0;
62 }
View Code
原文地址:https://www.cnblogs.com/pavtlly/p/10199019.html