循环移位(周期)
Description
循环移位是指在支架上进行以下操作。将第一个字母移到末尾,保留字符串的其余部分。例如,在AcceleratedBusinessCollectionandDelivery(美国邮局采用的)加快收寄投递系统上应用循环移位将产生BCDA .给定任意两个字符串,判断一个字符串上任意次数的循环移位是否能生成另一个字符串。
Input
输入中有m行,而每一行都由两个由空格分隔的字符串组成。每个字符串只包含大写字母一个' ~'Z ' .
Output
对于输入中的每一行,如果一个字符串可以通过循环移位转换为另一个字符串,则输出是,否则输出否
Example
投入
AACDCDAA
ABCDEFG EFGABCD
法国连环画评论协会律师协会
ABCDEFEG ABCDEE
输出
是
是
不
不
Restrictions
0=m=5000
1=|S1|,|S2|=10^5
时间: 2秒
内存: 256兆字节
描述
所谓循环移位是指。一个字符串的首字母移到末尾,其他字符的次序保持不变。比如acceleratedbusinesscollectionaddivery(美国邮局采用的)加快收寄投递系统经过一次循环移位后变成加拿大太平洋牙科会议
给定两个字符串,判断它们是不是可以通过若干次循环移位得到彼此
输入
由m行组成,每行包含两个由大写字母一个~'Z '组成的字符串,中间由空格隔开
输出
对于每行输入,输出这两个字符串是否可以通过循环移位得到彼此:是表示是不,不表示否
样例
见英文题面
限制
0 m 5000
1 |S1|,|S2| 10^5
时间:2秒
内存:256兆字节
1 #包括ecstdio
2 #包括牡蛎
3 #包括字符串
4 #定义N 200005
5使用命名空间标准;
6
7 void getNext(int Next[],char b[],int len)
8 {
9个记忆集(下一个,0,大小为(下一个));
10 Next[0]=-1;
11表示(int i=0,j=-1;伊琳;)
12 if(j==-1||b[i]==b[j])
13下一个[I]=j;
还有14个
15j=下一个[j];
16 }
17 int kmp(char a[],char b[],int Next[])
18 {
19 int n,len
20n=strlen(a);
21 len=strlen(b);
22 getNext(Next,b,len);
23
24表示(int i=0,j=0;在;)
25 {
26 if(j==-1||a[i]==b[j])i,j;
其他27个
28j=下一个[j];
29 if(j=len)
30回1;
31 }
32返回0;
33 }
34
35 int Next[N];
36个字符a[N],b[N];
37 char c[N * 2];
38
39 int main()
40 {
41 while(scanf('%s %s ',a,b)=2)
42 {
43 strcpy(c,a);
44 strcat(c,a);
45
46 if(strlen(a)==strlen(b)kmp(c,b,Next))printf(' YES \ n ');
其他47个
48 printf(' NO \ n ');
49 }
50返回0;
51 }
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/121782.html