UVa12169 不爽的裁判

来源:互联网 发布:淘宝主图视频要钱吗 编辑:程序博客网 时间:2024/04/28 23:38

//先贴上暴力代码,再加上 拓展欧几里得算法

//*********************************************************************************

#include <iostream>



using namespace std;
const int mod = 10001;
int t, x[210];


void solve(){
    for(int a=0; a<=10000; a++)   {
        for(int b=0; b<=10000; b++)     {
            bool flag = true;
            for(int i=2; i<=2*t; i+=2)       {
                x[i] = (a*x[i-1] + b) % mod;
                if(i+1<=2*t&&x[i+1]!=((a*x[i]+b)%mod))     {
                    flag = false;
                    break;
                }
            }
            if(flag) return;
        }
    }
}


int main(){
   cin>>t;
   for(int i=1; i<=2*t; i+=2) cin>>x[i];
   solve();
   for(int i=2; i<=2*t; i+=2) cout<<x[i]<<"\n";
    return 0;

}

//***************************************************************************************

#include <iostream>
using namespace std;
const int mod=10001;
typedef long long ll;
ll x[210];
int t;


void exgcd(ll a,ll b,ll &d,ll&x,ll &y){
if(!b){d=a;x=1;y=0;}
else{exgcd(b,a%b,d,y,x);y-=x*(a/b);}



void solve(){
for(int a=0;a<mod;a++){
ll n,b,g;
ll temp=x[3]-a*a*x[1];
exgcd(mod,a+1,g,n,b);//得到了g n b
if(temp%g) continue;//没有解
b = temp / g * b;
bool flag=true;
for(int i=2;i<=2*t;i+=2){
x[i]=((ll)x[i-1]*a+b)%mod;
if((i+1)<(2*t) && x[i+1]!=((x[i]*a+b)%mod)){
flag=false;
break;
}

if(flag) return ;
}
}


int main(){
cin>>t;
for(int i=1;i<=2*t;i+=2) cin>>x[i];
solve();
for(int i=2;i<=2*t;i+=2) cout<<x[i]<<endl; 

return 0;
}

//调试时,生成的.exe不是重新编译的源代码的,日了狗了,白调试好久

0 0
原创粉丝点击