zoukankan      html  css  js  c++  java
  • HDU——1788 Chinese remainder theorem again

    再来一发水体,是为了照应上一发水题。

    再次也特别说明一下,白书上的中国剩余定理的模板不靠谱。

    老子刚刚用柏树上的模板交上去,简直wa出翔啊。

    下面隆重推荐安叔版同余方程组的求解方法。

    反正这个版本十分强大,适用于各种情况。

    题目的意思是告诉你I和a,接下来有I个mi,它所对应的余数ai=mi-a;

    这里我用白书上的模板交上去就wa了哦,用这个版本吧。

    #include <iostream>
    #include <cstdio>
    #define ll long long
    using namespace std;
    
    ll c[11],m[11],n,t;
    
    void exgcd(ll A,ll B,ll& d,ll& x,ll& y)
    {
        if (B==0) { x=1,y=0,d=A; }
        else { exgcd(B,A%B,d,y,x); y-=A/B*x; }
    }
    
    ll china()
    {
        bool ans=true;
        ll am=m[1],d,y0,z0;
        ll ac=c[1];
            for (ll i=2; i<=n; i++)
            {
                exgcd(am,m[i],d,y0,z0);
                if ((ac-c[i])%d!=0)
                {
                    ans=false;
                    break;
                }
                y0=(c[i]-ac)/d*y0;
                y0=((y0%(m[i]/d))+(m[i]/d))%(m[i]/d);
                ac=am*y0+ac,am=am/d*m[i],ac=(ac%am+am)%am;
            }
            if (ac==0) ac=am;//这里是题目说明了整数,不能为0哦。
        return ac;
    }
    
    int main()
    {
        while (cin>>n>>t && (n|t))
        {
            for (ll i=1; i<=n; i++) scanf("%I64d",&m[i]),c[i]=m[i]-t;
            cout<<china()<<endl;
        }
        return 0;
    }
    

      

    如有转载,请注明出处(http://www.cnblogs.com/lochan)
  • 相关阅读:
    C#
    if
    .net 5.0
    C# 未提供必须形参对应的实参
    EasyRTC报错 “[ERR] mod_local_stream.c:880 Unknown source default”排查
    EasyRTC通过公网进入会议室失败问题排查及解决
    【CF1558B】Up the Strip
    【AT Keyence2019E】Connecting Cities
    【洛谷P7470】岛屿探险
    【洛谷P6628】丁香之路
  • 原文地址:https://www.cnblogs.com/lochan/p/3348670.html
Copyright © 2011-2022 走看看