题解
做法
令两循环节分别为 。模拟题意,比较两字符串直到第
个字符为止。
证明
以下记号不区分串和串长
首先给出 Periodicity Lemma:
假设一个字符串
有循环节(不需要是完整循环节)
和
,并且满足
,那么
也是一个循环节。
记由串 无限循环得到的串为
。记串
到第
位的前缀为
。令
,
。
当 时答案显然。下面证当
时,必有
:
令 ,由 Periodicity Lemma,
存在循环节
,并且它显然是
的一个完整循环节。
由此易得, 也是
的完整循环节,并且已经验证了
,所以
。
时间复杂度
显然
代码
#include <bits/stdc++.h>
using namespace std;
const int N=100020;
char c1[N],c2[N];
char solve()
{
int n=strlen(c1);
int m=strlen(c2);
for(int i=0;i<2*max(n,m);i++) //懒惰,直接*2了
{
if(c1[i%n]<c2[i%m]) return '<';
else if(c1[i%n]>c2[i%m]) return '>';
}
return '=';
}
int main(void)
{
while(~scanf("%s",c1))
{
scanf("%s",c2);
printf("%c\n",solve());
}
return 0;
} 
京公网安备 11010502036488号