2020牛客暑期多校训练营(第一场)

F Infinite String Comparision

官方题解:
• Compare the string a^{infty} and b^{infty} directly
• By the Periodicity Lemma, if there is no mismatches in the first a + b -gcd(a, b) characters, the two string are identical
主要是Periodicity Lemma这个知识点,简单地说就是在这里插入图片描述
具体推导看超链接里面
刚开始做是想通过把短的字符串加长再比较,但因为没考虑到他们长度倍数可能会大于2,因此一直段错误(好像不太好改,就放弃了这种做法)
然后换了一个新的做法,也就最朴素的一个一个字符比较,比较长度简单粗暴的选取最长的字符串的三倍(这个长度肯定大于gcd(p,q)+p+q)

代码:

#include
using namespace std;
string a,b;
int l1,l2,f1,f2,f;
int main(){
    while(cin>>a>>b){
        l1=a.length(),l2=b.length(),f1=0,f2=0,f=0;
        int n=max(l1,l2);
        for(int i=0;i<3*n;i++){
            if(f1==l1)  f1=0;
            if(f2==l2)  f2=0;
            if(a[f1]==b[f2])    f1++,f2++;
            else    if(a[f1]>b[f2])  {cout<<">"<<endl;f++;break;}
            else    {cout<<"<"<<endl;f++;break;}
        }
        if(!f)  cout<<'='<<endl;
    }
}

J Easy Integration

推导结果为 (n!)^2 / (2n+1)!
具体解法有 伽马函数 华里士公式 以及 分部积分法(上学期明明很认真练习了分部积分和华里士公式结果还忘了这俩办法。。。)
欧拉积分,伽马函数、wallis公式联系

你可能感兴趣的:(ACM集训)