• codeforces 547A Mike and Frog


    近期都是这样的题呢。

    。。。。

    開始想纯暴力(体如今跳出循环t>=那里。,,,)。。,。随着数据变大。。

    。。。(t=499981500166是能够的),,,。。,,23333333

    超时代码:

    #include <iostream>
    #include<bits/stdc++.h>

    using namespace std;

    int main()
    {
        long long int mod;
        scanf("%lld",&mod);
        long long int yuanshi1,mubiao1;
        scanf("%lld%lld",&yuanshi1,&mubiao1);
        long long int x1,y1;
        scanf("%lld%lld",&x1,&y1);
        long long int yuanshi2,mubiao2;
        scanf("%lld%lld",&yuanshi2,&mubiao2);
        long long int x2,y2;
        scanf("%lld%lld",&x2,&y2);
        long long int t=0;
        while(yuanshi1!=mubiao1||yuanshi2!=mubiao2)
        {
            yuanshi1=(x1*yuanshi1+y1)%mod;
            yuanshi2=(x2*yuanshi2+y2)%mod;
            t++;
            if(t>=50000000000)
            {
                printf("-1 ");
                return 0;
            }
        }
        printf("%lld ",t);
        return 0;
    }

    非常质朴啊。。。。


    此题最深刻的教训是。

    。。。以后别对变量瞎起名字!

    !!

    !!

    #include <iostream>
    #include<bits/stdc++.h>

    using namespace std;

    int main()
    {
        long long int mod;
        scanf("%lld",&mod);
        long long int yuanshi1,mubiao1;
        scanf("%lld%lld",&yuanshi1,&mubiao1);
        long long int x1,y1;
        scanf("%lld%lld",&x1,&y1);
        long long int yuanshi2,mubiao2;
        scanf("%lld%lld",&yuanshi2,&mubiao2);
        long long int x2,y2;
        scanf("%lld%lld",&x2,&y2);
        long long int k1=0,k2=0;
        while(yuanshi1!=mubiao1&&k1<mod)  //先算第一个满足的情况
        {
            yuanshi1=(x1*yuanshi1+y1)%mod;
            yuanshi2=(x2*yuanshi2+y2)%mod;
            k1++;
        }
        if(yuanshi1==mubiao1&&yuanshi2==mubiao2)    //同一时候第二个也满足了
        {
            printf("%lld ",k1);
            return 0;
        }
        if(yuanshi1!=mubiao1)        //假设跳出是由于大于了MOD那就没招了(题里给的!


        {
            printf("-1 ");
            return 0;
        }
        long long int c=1;
        yuanshi1=(yuanshi1*x1+y1)%mod;
        long long int x=x2,y=y2;
            while(yuanshi1!=mubiao1&&c<=mod)    //找两个循环的最小公倍数。。。。

    。。
            {
                yuanshi1=(yuanshi1*x1+y1)%mod;
                x=(x*x2)%mod;
                y=(x2*y+y2)%mod;
                c++;
            }
            if(yuanshi1!=mubiao1)
            {
                printf("-1 ");
                return 0;
            }
            while(yuanshi2!=mubiao2&&k2<=mod){
                yuanshi2=(yuanshi2*x+y)%mod;
                k2++;
            }
            if(yuanshi2!=mubiao2){
                printf("-1 ");
                return 0;
            }
            printf("%lld ",k2*c+k1);
        return 0;
    }

    还可以用拓展欧几里得。。

    。。。

    假设这个线性方程有解,那么一定有gcd(a,b) | m。即a。b的最大公约数可以整除m(m%gcd(a,b)==0)。

    
  • 相关阅读:
    HDU 1423 Greatest Common Increasing Subsequence(LICS入门,只要求出最长数)
    HDU 5455 Fang Fang
    hihoCoder 1234 fractal
    二叉排序树
    最大连续子序列和,最大上升子序列和,最长上升子序列,最长公共子串,最长公共子序列,最长上升公共子序列
    C++ string string string string string string string string string string
    pip安装第三方库
    pip安装时使用国内源,加快下载速度
    pip升级命令
    instanceof -- JS
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7308406.html
Copyright © 2020-2023  润新知