题解
做法
令两循环节分别为 。模拟题意,比较两字符串直到第
个字符为止。
证明
以下记号不区分串和串长
首先给出 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; }