zoukankan      html  css  js  c++  java
  • uva 12169 Disgruntled Judge

    法一直接暴力枚举a和b的值,法二扩展欧几里德算法。

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    const int mod=10001;
    
    int main()
    {
        int x[205],t,i,flag,a,b,j;
        while(~scanf("%d",&t))
        {
            for(i=0;i<t;i++)
            {
                scanf("%d",&x[2*i+1]);
            }
    
            for(a = 0; a <= 10000; a++)
            {
                for(b = 0; b <= 10000; b++)
                {
                    flag=1;
                    x[2]=(a*x[1]+b)%mod;
                    for(i=3;i<=2*t;i++)
                    {
                        if(i%2==0)
                        {
                            x[i]=(x[i-1]*a+b)%mod;
                        }
                        else
                        {
                            if(x[i]!=(a*x[i-1]+b)%mod)
                            {
                                flag=0;
                                break;
                            }
                        }
                    }
                    if(flag) break;
                }
                if(flag) break;
            }
            for(i = 1; i <= t; i++)
            {
                printf("%d
    ",x[2*i]%10001);
            }
        }
        return 0;
    }
    

    法二
    gcd里面没有用longlong挂了好久……

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    const int mod=10001;
    typedef long long ll;
    void gcd(ll a,ll b, ll& d, ll& x, ll& y)
    {
        if(!b)
        {
            d=a;x=1;y=0;
        }
        else
        {
            gcd(b,a%b,d,y,x);y-=(a/b)*x;
        }
    }
    
    int main()
    {
        int x[205],t,i,flag;
        ll k,a,b,p,d;
        while(~scanf("%d",&t))
        {
            for(i=0; i<t; i++)
            {
                scanf("%d",&x[2*i+1]);
            }
    
            for(a=0; a<=10000; a++)
            {
                p=x[3]-x[1]*a*a;
                gcd(mod,a+1,d,k,b);
                if(p%d!=0) continue;
                b*=p/d;
                flag=1;
                for(i=2; i<=2*t; i++)
                {
                    if(i%2==0)
                    {
                        x[i]=(x[i-1]*a+b)%mod;
                    }
                    else
                    {
                        if(x[i]!=(a*x[i-1]+b)%mod)
                        {
                            flag=0;
                            break;
                        }
                    }
                }
                if(flag) break;
            }
    
            //printf("%d %d
    ",a,b);
            for(i=1; i<=t; i++)
            {
                printf("%d
    ",x[2*i]);
            }
        }
        return 0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    获得最小的topK
    阿里凑单算法
    排序指标 --- 1、平均准确率均值 (Mean Average Precision-MAP) & 2、NDCG (normalized discounted CG-cumulative gain,累计增益)
    deepwalk算法
    tmp-动态规划-迷宫走法
    分治法-合并K个有序链表
    如何在创建hive表格的python代码中导入外部文件
    如何删除hive表格的分区
    pytorch中torch.nn构建神经网络的不同层的含义
    pytorch中如何使用预训练词向量
  • 原文地址:https://www.cnblogs.com/xryz/p/4847974.html
Copyright © 2011-2022 走看看