1001 Clairewd’s message

题目大意:第一行输入字母加密规则,第二行输入一个串a以及加密后的a’组成了一个串a’a。但是这个串残缺了一部分内容(a的部分残缺了),只剩下了s=a’b(b是a的一个前缀或者空串)

让求出最短的a。

 

 1 #include <map>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 const int maxn=100001;
 6 using namespace std;
 7 int main()
 8 {
 9     char s[27],s1[maxn];
10     int l1,t,i,j,k,n,flag,l;
11     scanf("%d%*c",&t);
12     while(t--)
13     {
14         map<char,char>a;
15         gets(s);
16         for(i=0;i<26;i++)
17             a[s[i]]=i+'a';
18         gets(s1);
19         l1=strlen(s1);
20         if(l1&1)
21             k=l1/2+1;
22         else
23             k=l1/2;
24         l=l1;
25         for(i=k;i<l1;i++)
26         {
27             flag=0;
28             for(j=i;j<l1;j++)
29             {
30                 if(a[s1[j-i]]!=s1[j])
31                 {
32                     flag=1;
33                     break;
34                 }
35             }
36             if(!flag)
37             {
38                 l=i;
39                 break;
40             }
41         }
42         if((l1&1==0)&&l==(l1/2))
43             puts(s1);
44         else
45         {
46             j=0;
47             printf("%s",s1);
48             for(i=l1-l;i<l;i++)
49                 printf("%c",a[s1[i]]);
50             puts("");
51         }
52     }
53     return 0;
54

相关文章:

  • 2021-12-17
  • 2021-10-14
猜你喜欢
  • 2022-02-12
  • 2022-01-06
  • 2021-10-14
  • 2021-08-04
  • 2021-10-23
  • 2021-07-26
相关资源
相似解决方案