点击打开链接
Clairewd’s messageTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important messages and she was preparing for sending it to ykwd. They had agreed that each letter of these messages would be transfered to another one according to a conversion table.
Input The first line contains only one integer T, which is the number of test cases. Hint Range of test data: T<= 100 ; n<= 100000;
Output For each test case, output one line contains the shorest possible complete text.
Sample Input 2abcdefghijklmnopqrstuvwxyzabcdabqwertyuiopasdfghjklzxcvbnmqwertabcde
Sample Output abcdabcdqwertabcde |
拓展kmp,看了别人的作为参考,第一次做这个,想不出来。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=2e5+10;
char s[N],a[N],pass[N];
int Next[N];
void getNext(char str[],int len)
{
Next[0]=-1;
int i=0,j=-1;
while(i<len)
{
if(j==-1||str[i]==str[j])
{
i++;
j++;
Next[i]=j;
}
else
j=Next[j];
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int i;
scanf("%s%s",s,a);
for(i=0;s[i];i++)
pass[s[i]-'a']=i+'a';
int len=strlen(a);
int mid=(len+1)/2;
for(i=0;i<mid;i++)
s[i]=pass[a[i]-'a'];
s[i]='*';
s[i+1]=0;
strcat(s,a+i);
getNext(s,len+1);
mid=len-Next[len+1];
for(i=0;i<mid;i++)
{
s[i]=a[i];
s[i+mid]=pass[a[i]-'a'];
}
s[i+mid]=0;
printf("%s\n",s);
}
return 0;
}