2020牛客多校 第一场 F-Infinite String Comparision (蒟蒻补题555)

题目链接: 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;
}

蒟蒻一只,日常被虐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值