zoukankan      html  css  js  c++  java
  • 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)。

    
  • 相关阅读:
    python之isinstance和issubclass
    python中类的继承
    python中面向对象
    python中常用的内置模块
    Python常用模块
    python中的常用内置模块
    python中的包、模块及导入
    python中的内置函数(二)
    国内7大核心期刊
    PS学习列表
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7308406.html
Copyright © 2011-2022 走看看