• UVA12169 不爽的裁判 Disgruntled Judge(扩展欧几里得+枚举)


    题目链接

    题意:

    思路:由于n和mod很小,因此可以直接枚举a  -  [0,10000],然后因为f[3]-a2*f[1]=b*(a+1)用扩展欧几里得求a+1关于MOD的逆元的然后求出b,再去确认ab是否符合。

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int MAXN = 100+10;
    ll f[MAXN];
    const int MOD = 10001;
    ll exgcd(ll a,ll b,ll &x,ll &y)
    {
        if(!b)
        {
            x=1;
            y=0;
            return a;
        }
        ll res=exgcd(b,a%b,x,y);
        ll tmp=x;
        x=y;
        y=tmp-(a/b)*y;
        return res;
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        n*=2;
        for(int i=1;i<=n;i+=2)
        {
            scanf("%lld",&f[i]);
        }
        for(int i=0;i<=10000;i++)
        {
            ll a=i;
            ll c=f[3]-a*a*f[1];
            ll b,t;
            ll d=exgcd(a+1,MOD,b,t);
            if(c%d)
            continue;
            b=b*c/d;
            int j;
            for(j=2;j<=n;j++)
            {
                if(j&1)
                {
                    if(f[j]!=(a*f[j-1]+b)%MOD)    
                    break;
                }
                else
                    f[j]=(a*f[j-1]+b)%MOD;
            }
            if(j>n)
                break; 
        }
        for(int i=2;i<=n;i+=2)
        {
            printf("%lld
    ",f[i]);
        }
    }
  • 相关阅读:
    进制
    变量
    cmd命令和快捷键
    面向对象和面向过程
    iterations 快捷键
    SQL语句分类和语法
    MySQL语法规范
    Web-Scale-IT 到底是啥?
    安全的应用程序开发和应用程序安全防御
    如何像后端一样写前端代码?
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/13792035.html
Copyright © 2020-2023  润新知