首页 > 其他 > 详细

UVA 12169 Disgruntled Judge

时间:2018-03-05 21:59:50      阅读:219      评论:0      收藏:0      [点我收藏+]

思路:枚举 a ,通过扩展欧几里得算法利用数列前两个值求 b ,排除非整数解的情况,判断该组 a,b 是否满足剩余序列,(注意必须判断整个序列,不能只判断前几个值,时间够用)。注意对于求出的 b 要模10001。(观察通解和b范围的关系)

 

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 void exgcd(int a,int b,int & d,int & x,int & y){
 5     if (b==0) {x=1;y=0;d=a;return;}
 6     exgcd(b,a%b,d,y,x);
 7     y-=x*(a/b);
 8 }
 9 
10 int main(){
11     
12     int n,h[10005],a,d,b,l;
13     scanf("%d",&n);
14     for(int i=1;i<=n;i++)
15         scanf("%d",&h[i]);
16 
17     for(a=0;a<10001;a++){
18 
19         exgcd(a+1,10001,d,b,l);
20         long long c=h[2]-(long long)a*a*h[1];
21         b=(b*c/d)%10001;
22         if (c%d) continue;
23         int f=1;
24         for (int i=1;i<n;i++){
25             int temp=(((a*h[i]+b)%10001)*a+b)%10001;
26             if (temp!=h[i+1]){
27                 f=0;
28                 break;
29             }
30         }
31         if (f) {
32             for (int i=1;i<=n;i++)
33                 printf("%d\n",(a*h[i]+b)%10001);
34             return 0;
35         }
36     }
37 }

 

UVA 12169 Disgruntled Judge

原文:https://www.cnblogs.com/travelller/p/8511571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!