啊这个题比赛的时候大家都过了,但是我们超时超内存WA三连秀,还是补一下
题目大意:
给定多组数据,每次比较两个字符串(无限循环)的字典序大小
题目思路:
当两个字符串长度相等时,可以直接判断字符串的字典序大小,但当两个字符串不等时,就需要将两个字符串通过一系列奇妙的手法在不超空间不超内存的情况下进行比较
本来有想到用将两个字符串延长到它们最小公倍数进行比较,但是超空间了,然后看到题解讨论中有一种神奇的做法比较a+b和b+a
证明:
首先这样的处理方法使得两个字符串长度相等了
假设第一个字符串长len1,第二个字符串长len2(len1<len2)
那么在前len1个长度相比较时是a[i]与b[i]相应,在对长度为len1+1的地方进行比较时,说明之前len1的部分两条字符串相等,所以在字符串1后面加了字符串2,就相当于字符串1加了之前与字符串2相同的公共部分,字符串1进行了一次循环,所以字符串1还是在与字符串2进行比较
#include<iostream>
using namespace std;
int main()
{
string a,b;
while(cin>>a)
{
cin>>b;
if(a+b<b+a)
cout<<"<"<<endl;
else if(a+b>b+a)
cout<<">"<<endl;
else
cout<<"="<<endl;
}
return 0;
}