牛客暑期多校训练营F Infinite String Comparision

啊这个题比赛的时候大家都过了,但是我们超时超内存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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值