题目链接: F-Infinite String Comparision
Description
两个串,无限循环长度比较字典序大小
Sample Input
aa
b
zzz
zz
aba
abaa
Sample Output
<
=
>
Method
- 题意无非是找两个无限循环字符串的前n个字符的大小关系,当找到第一个大小关系时,就可以确定输出两个字符字典序大小。
- 我初次解用的是暴力两倍,选 a b 串两倍最大的数,但是还是错了,显示有一个点TLE。
(连签到题都没做出来…) - 正解是找到最小的能决定两个串大小的串长:
a.size() + b.size() - gcd(a.size(), b.size()); 然后逐次比较即可。
Code
蒟蒻代码,用scanf应该更合适一点
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
template <typename T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; } //求最大公约数
int main()
{
string s1, s2;
while(cin >> s1 >> s2)
{
int n, m, sum, flag=0;
n = s1.size();
m = s2.size();
sum = n + m - gcd(n, m);
for(int i=0; i<sum; i++)
{
if(s1[i%n] < s2[i%m]) {
printf("<\n"); flag=1; break;
}
else if(s1[i%n] > s2[i%m]) {
printf(">\n"); flag=1; break;
}
}
if (flag == 0)
printf("=\n");
}
return 0;
}
蒟蒻一只,日常被虐