2020 牛客多校第一场 F.Infinite String Comparision
链接
题意
给出字符串a,b,判断 \(a^\infty \) 与 \(b^\infty \)的大小, 当x=“abc”时,\(x^\infty =abcabc... \)。
思路
最开始是直接将两个字符串分别扩展到 LCM 的长度,但是炸了,然后瞎猜匹配到长的字符串的两倍。题解给出的长度是a+b-gcd(a,b)。
代码
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxn=1e4+10; 6 int main() 7 { 8 string s1,s2; 9 while(cin>>s1>>s2) 10 { 11 string a="",b=""; 12 int l1=s1.length(),l2=s2.length(); 13 string s; 14 int ok=0; 15 if(l1<l2) 16 { 17 s2+=s2; 18 for(int i=0; i<2*l2; i++) 19 if(s1[i%l1]>s2[i]) 20 { 21 ok=1; 22 break; 23 } 24 else if(s1[i%l1]<s2[i]) 25 { 26 ok=-1; 27 break; 28 } 29 } 30 else 31 { 32 s1+=s1; 33 for(int i=0; i<2*l1; i++) 34 if(s1[i]>s2[i%l2]) 35 { 36 ok=1; 37 break; 38 } 39 else if(s1[i]<s2[i%l2]) 40 { 41 ok=-1; 42 break; 43 } 44 } 45 if(ok==-1) 46 printf("<\n"); 47 else if(ok==0) 48 printf("=\n"); 49 else 50 printf(">\n"); 51 } 52 return 0; 53 }