UVA.12169 Disgruntled Judge ( 拓展欧几里得 )
UVA.12169 Disgruntled Judge ( 拓展欧几里得 )
题意分析
给出T个数字,x1,x3……x2T-1。并且我们知道这x1,x2,x3,x4……x2T之间满足xi = (a * xi-1 + b ) MOD 10001, 求出x2,x4……x2T.
由于本题中的a和b是未知的,所以需要根据已知条件求出a和b,据说有人暴力枚举a和b然后过了。 所以我来换另一种方法。
其实我们可以枚举a,并根据x1,x3算出求出可行的b的值。如何做到呢?
首先我们已经知道
x2 = (a * x1 + b) MOD 10001
x3 = (a * x2 + b) MOD 10001
于是就可以把第一个式子带入到第二个式子中,消去x2,进而得到
x3 = ( a * (a * x1 + b) + b ) MOD 10001
而这个式子,可以进一步转化为
思考一下为什么,等式左边是10001 * k + x3, 对10001 取模后,不就是x3吗? 一开始没有想到,要熟记这个转化!
对于式子x3 + 10001 * k = ( a * (a * x1 + b) + b ) ,继续稍作化简,可以得到
(a+1) * b - 10001 * k = x3 - a * a * x1
而这个式子,就可以用拓展欧几里得算法,求得一组可行解(b,k),我们比较关心的是b的值,在计算完成之后,要记得检验 (x3 - a * a * x1) / gcd( (a+1),10001) 是否为整数,若是的话,就说明这对(a,b) 对于x1,x3是可行的。
然而题目还给出了x5……等等的奇数序列,我们在依次递推的时候,若发现求出的x5,x7……与原数列不相等,那么说明求出的(a,b)并不work,还要重新求解,题目保证一定有解。
代码总览
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#define ll long long
#define nmax 220
#define MOD 10001
using namespace std;
ll a,b,k,c,d;
int n;
ll x[nmax];
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);
}
}
bool solve(){
c = x[3] - a*a*x[1];
exgcd(a+1,MOD,d,b,k);
if(c % d == 0){
b = c / d * b;
return true;
}
else return false;
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&n) != EOF){
for(int i =1;i<=2*n;i+=2) scanf("%lld",&x[i]);
bool isfindall = false;
for( a = 0;a < MOD;++a){
if(solve()){
for(int j = 2;j<=2*n;++j){
isfindall = false;
ll tmp = ( (a * x[j-1]) + b)%MOD;
if( (j%2!=0) && tmp != x[j]) break;
else x[j] = tmp;
if(j == 2*n) isfindall = true;
}
if(isfindall) break;
}
}
for(int i = 2;i<=2*n;i+=2){
printf("%lld\n",x[i]);
}
}
return 0;
}
UVA.12169 Disgruntled Judge ( 拓展欧几里得 )的更多相关文章
- UVA 12169 Disgruntled Judge 扩展欧几里得
/** 题目:UVA 12169 Disgruntled Judge 链接:https://vjudge.net/problem/UVA-12169 题意:原题 思路: a,b范围都在10000以内. ...
- hdu 2769 uva 12169 Disgruntled Judge 拓展欧几里德
//数据是有多水 连 10^10的枚举都能过 关于拓展欧几里德:大概就是x1=y2,y1=x2-[a/b]y2,按这个规律递归到gcd(a,0)的形式,此时公因数为a,方程也变为a*x+0*y=gcd ...
- 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- ...
- UVa 12169 Disgruntled Judge 紫书
思路还是按照紫书,枚举a,得出b, 然后验证. 代码参考了LRJ的. #include <cstdio> #include <iostream> using namespace ...
- UVa 12169 - Disgruntled Judge(拓展欧几里德)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 12169 Disgruntled Judge【扩展欧几里德】
题意:随机选取x1,a,b,根据公式xi=(a*xi-1+b)%10001得到一个长度为2*n的序列,奇数项作为输入,求偶数项,若有多种,随机输出一组答案. 思路:a和b均未知,可以考虑枚举a和b,时 ...
- UVA 12169 Disgruntled Judge
我该怎么说这道题呢...说简单其实也简单,就枚举模拟,开始卡了好久,今天看到这题没a又写了遍,看似会超时的代码交上去a了,果然实践是检验真理的唯一标准... #include <iostream ...
- UVA 12169 Disgruntled Judge(Extended_Euclid)
用扩展欧几里德Extended_Euclid解线性模方程,思路在注释里面了. 注意数据范围不要爆int了. /********************************************* ...
- uva 10548 - Find the Right Changes(拓展欧几里得)
题目链接:uva 10548 - Find the Right Changes 题目大意:给定A,B,C,求x,y,使得xA+yB=C,求有多少种解. 解题思路:拓展欧几里得,保证x,y均大于等于0, ...
随机推荐
- SSM搭项目报错:HTTP Status 400 – Bad Request
具体报错如下: Type Status Report Description The server cannot or will not process the request due to some ...
- linux执行命令返回码释义
Linux 操作系统错误代码解释 0.错误代码1-10 OS error code 0: Success 操作系统错误代码0:成功 OS error code 1: Operation not per ...
- 如何布局您的PC站和移动站,并表达两者之间内容的对应关系
如何布局您的PC站和移动站,并表达两者之间内容的对应关系 目前较流量的PC站与移动站配置方式有三种,百度站在搜索引擎角度将这三种分别称为跳转适配.代码适配和自适应,以下为这三种配置方式的名词解释及 ...
- Netty源码分析第2章(NioEventLoop)---->第3节: 初始化线程选择器
Netty源码分析第二章:NioEventLoop 第三节:初始化线程选择器 回到上一小节的MultithreadEventExecutorGroup类的构造方法: protected Multi ...
- lspci命令详解
基础命令学习目录首页 最近经常用到 lspci -nn | grep Eth 命令,需要学习下PCI总线,找到一篇文章,虽然也是转载,但写的较清晰,再次转载下. http://blog.csdn.ne ...
- fetch上传文件
通过简单的配置,实现form表单文件上传 var formData = new FormData(); var fileField = document.querySelector("inp ...
- 基于Promise规范的fetch API的使用
基于Promise规范的fetch API的使用 fetch的使用 作用:fetch 这个API,是专门用来发起Ajax请求的: fetch 是由原生 JS 提供的 API ,专门用来取代 XHR 这 ...
- Scrum Meeting 11.04
成员 今日任务 明日计划 用时 徐越 学习Fragment相关知识,代码移植 代码移植 4h 赵庶宏 selvet移植,服务器配置,编写数据库 服务器配置,代码移植 4h 薄霖 学习安卓界面设计数据库 ...
- 第二阶段Sprint冲刺会议2
进展:讨论主界面布局,跳转界面的布局,查看有关页面跳转的资料及示例代码并试着编写.
- Internet History, Technology and Security (Week6)
Week6 The Internet is desinged based on four-layer model. Each layer builds on the layers below it. ...