题意:随机选取x1,a,b,根据公式xi=(a*xi-1+b)%10001得到一个长度为2*n的序列,奇数项作为输入,求偶数项,若有多种,随机输出一组答案。

思路:a和b均未知,可以考虑枚举a和b,时间复杂度为10000*10000*100,但是题目数据比较水,这样枚举也是能过的。高效的做法是:枚举a,根据以下公式求出b。

a*x1+b - MOD*y1 = x2;

a*x2+b - MOD*y2 = x3;

解得:

x3 - a*a*x1=(a+1)*b + MOD * y;

该方程为关于变量b的模线性方程 ,用扩展欧几里得算法解出一个解b0,(当gcd(a+1,MOD)==1) 则解出的为一个同余系;

b = b0 + MOD*k (k为任意整数);(该方程对应了 b = b0 + MOD' * k ,其中MOD' 为MOD/ gcd(a+1,MOD) ); 只需要检验一个b即可

但是当gcd(a+1,MOD)不等1时,直接用b0求解是有问题的因为解不在是MOD的同余系而是MOD‘的同余系;

所以正解应该是算出b0然后解出0 - 10000范围内的 可行b 然后检验; 算法复杂度为 O(nlogn*100);

#include<stdio.h>
#include<string.h>
const int mod=;
typedef long long ll;
ll x[];
ll ex_gcd(ll a,ll b,ll &x,ll &y){
if(!b){
x=,y=;
return a;
}
int ans=ex_gcd(b,a%b,y,x);
y-=a/b*x;
return ans;
}
int main(){
int n,i;
while(~scanf("%d",&n)){
n*=;
for(i=;i<n;i+=){
scanf("%lld",&x[i]);
}
long long a,b,c,d,y;
for(a=;;a++){
c=x[]-a*a*x[];
d=ex_gcd(a+,mod,b,y);
if(c%d) continue;
b=b*c/d;
for(i=;i<=n;i++){
if(i&){
if(x[i]!=(a*x[i-]+b)%mod)
break;
}else
x[i]=(a*x[i-]+b)%mod;
}
if(i>n) break;
}
for(i=;i<=n;i+=)
printf("%lld\n",x[i]);
}
return ;
}

http://www.ithao123.cn/content-4532209.html

UVA 12169 Disgruntled Judge【扩展欧几里德】的更多相关文章

  1. UVA 12169 Disgruntled Judge 扩展欧几里得

    /** 题目:UVA 12169 Disgruntled Judge 链接:https://vjudge.net/problem/UVA-12169 题意:原题 思路: a,b范围都在10000以内. ...

  2. hdu 2769 uva 12169 Disgruntled Judge 拓展欧几里德

    //数据是有多水 连 10^10的枚举都能过 关于拓展欧几里德:大概就是x1=y2,y1=x2-[a/b]y2,按这个规律递归到gcd(a,0)的形式,此时公因数为a,方程也变为a*x+0*y=gcd ...

  3. UVA.12169 Disgruntled Judge ( 拓展欧几里得 )

    UVA.12169 Disgruntled Judge ( 拓展欧几里得 ) 题意分析 给出T个数字,x1,x3--x2T-1.并且我们知道这x1,x2,x3,x4--x2T之间满足xi = (a * ...

  4. UVA 12169 Disgruntled Judge(Extended_Euclid)

    用扩展欧几里德Extended_Euclid解线性模方程,思路在注释里面了. 注意数据范围不要爆int了. /********************************************* ...

  5. UVa 12169 - Disgruntled Judge(拓展欧几里德)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. UVA 12169 Disgruntled Judge 枚举+扩展欧几里得

    题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...

  7. UVa 12169 Disgruntled Judge 紫书

    思路还是按照紫书,枚举a,得出b, 然后验证. 代码参考了LRJ的. #include <cstdio> #include <iostream> using namespace ...

  8. UVA 12169 Disgruntled Judge

    我该怎么说这道题呢...说简单其实也简单,就枚举模拟,开始卡了好久,今天看到这题没a又写了遍,看似会超时的代码交上去a了,果然实践是检验真理的唯一标准... #include <iostream ...

  9. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

随机推荐

  1. MySQL之MySQL常用的函数方法

    MySQL常用函数 本篇主要总结了一些在使用MySQL数据库中常用的函数,本篇大部分都是以实例作为讲解,如果有什么建议或者意见欢迎前来打扰. limit Select * from table ord ...

  2. CSS级联和继承

    2016-11-06 <CSS入门经典>第七章 1.在HTML中使用CSS样式表的三种方式: (1)内联的样式表. eg:<em style="background-whi ...

  3. user profile services提示“BAIL: MMS(7116): sql.cpp(8490): 0x80231334 (The sql connection string has unsupported values.)”解决办法

    user profile services的2个服务Forefront Identity Manager Service 和 Forefront Identity Manager Synchroniz ...

  4. AVAudioSession初探

    根据文档,AudioSession规定了app和系统音频行为交互的规范,一个app只有一个AudioSession的单例. app通过设置自己AudioSession的单例的属性来告诉系统自身想达到的 ...

  5. Android http 的使用

    1.okHttp https://github.com/square/okhttp 2.okhttp-utils       https://github.com/hongyangAndroid/ok ...

  6. 动画效果 View控件的显示和隐藏效果

    显示动画: mShowAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,     Animation.RELATIVE_ ...

  7. iOS开发UINavigation——导航控制器UINavigationController

    iOS开发UINavigation系列一——导航栏UINavigtionBar摘要iOS中的导航条可以附着于导航控制器之中使用,也可以在controller中单独使用,这篇博客,主要讨论有关导航栏的使 ...

  8. 在FlashDevelop里使用1.8版本的的TortoiseSVN

    前几天更新TortoiseSVN到1.8版本后发现FD(FlashDevelop)里不能使用svn了,在项目面板里的所有文件及文件夹都不能正确显示svn状态了,清一色都显示为未添加版本控制的状态图标, ...

  9. 关于NodeJS的思考

    对于NodeJS来说传统程序员比较陌生,初看以为是什么前端框架,其实并不是前端框架.传统的Javascript只能跑在浏览器中,但是一位叫Ryan Dahl的开发者灵感一来,为什么Javascript ...

  10. 字符输入流Reader简要概括

    字符输入流Reader组成结构 本篇将对JAVA I/O流中的字符输入流Reader做个简单的概括: 总得来说,每个字符输入流类都有一个对应的用途,如下: 字符流基类:Reader 字节流转字符流:I ...