zoukankan      html  css  js  c++  java
  • POJ2891 Strange Way to Express Integers [中国剩余定理]

    不互质情况的模板题

    注意多组数据不要一发现不合法就退出

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    inline ll read(){
        char c=getchar();ll x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    ll n,a1,m1,a2,m2;
    void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
        if(b==0) d=a,x=1,y=0;
        else exgcd(b,a%b,d,y,x),y-=(a/b)*x;
    }
    int main(){
        freopen("in","r",stdin);
        while(scanf("%lld",&n)!=EOF){
            int flag=0;
            m1=read();a1=read();n--;
            while(n--){
                m2=read();a2=read();
                if(flag) continue;
                ll d,t1,t2;
                exgcd(m1,m2,d,t1,t2);
                if((a2-a1)%d){flag=1;continue;}
                t1*=(a2-a1)/d;
                m2/=d;
                t1=(t1%m2+m2)%m2;
                a1=a1+m1*t1;
                m1*=m2;
            }
            if(flag) puts("-1");
            else printf("%lld
    ",a1);
        }
    }
  • 相关阅读:
    接口
    java基础
    java的反射
    按照字典序打印所有的字符串
    求幂的问题
    时间复杂度与空间复杂度
    孩子们的游戏(圆圈中最后剩下的数)
    约瑟夫环问题
    翻转单词顺序列
    复杂链表的复制
  • 原文地址:https://www.cnblogs.com/candy99/p/6398982.html
Copyright © 2011-2022 走看看