UVa 12169 Disgruntled Judge 紫书

思路还是按照紫书,枚举a,得出b, 然后验证。

代码参考了LRJ的。

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 const int maxn=100*2+5;
 6 const int M=10001;
 7 int x[maxn], T;
 8 
 9 void solve()
10 {
11     for(int a=0; a<M; a++)
12         for(int b=0; b<M; b++)
13         {
14             bool ok=true;
15             for(int i=2; i<=2*T; i+=2)
16             {
17                 x[i] = (a*x[i-1]+b) %M;
18                 if(i+1<=2*T && x[i+1] != (a*x[i]+b) %M)//验证 
19                 {
20                     ok=false;
21                     break;
22                 }
23             }
24             if(ok)    return;
25         }
26 }
27 
28 
29 
30 int main()
31 {
32     while(cin>>T)
33     {
34         for(int i=1; i<=2*T-1; i+=2)    cin>>x[i];
35         solve();
36         for(int i=2; i<=2*T; i+=2)    cout<<x[i]<<endl;
37     }
38 }

简洁明了, 没什么可说的, 注意循环的边界条件, 还有a+=2不要写成a++。

 

另一种扩展欧几里得的解法, 我下次再补吧。

posted @ 2019-06-17 20:37  WatsonCao  阅读(149)  评论(0)    收藏  举报