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, ...
随机推荐
- MD5加密简单使用
MD5加密简单使用规则 先写一个加密的工具类吧! public class MD5Util { public static String encoderPassword(String s) throw ...
- Visual Studio的框选代码区块功能
要从Visual Studio里复制代码粘贴到其他地方,会因为对齐的问题,造成粘贴的时候,代码左边带有大量的空格. 而VS有一个很好的功能就是框选功能,使用方法是,将光标放置在要框选代码的最左边,然后 ...
- centos6.9+lnmp1.5环境部署swoole记录
hiredis下载地址:https://github.com/redis/hiredis/releasesunzip hiredis-v0.13.3.zipmake -jsudo make insta ...
- tar.gz 文件解压 (安装 netbean 时会用到)
sudo tar xvf jdk-7u45-linux-i586.tar.gz -C /usr/lib 参考文章 http://hi.baidu.com/xiaomeng008/item/5e787b ...
- Spring Cloud限流思路及解决方案
转自: http://blog.csdn.net/zl1zl2zl3/article/details/78683855 在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Clo ...
- 浅谈jQuery构造函数
$()函数到底做的什么 jQuery在前端领域路人皆知,对于一向喜欢玩js的博主来说,虽然能力有限,但是还是很喜欢研究他的做为.那么一个简单的美元符号$与一对常见的()括号,jQuery底层到底做了哪 ...
- 【探路者】Beta发布用户使用报告
用户数量:18 一.用户列表及评论. 用户序号 用户来源 用户下载软件途径 用户姓名 用户描述(信息) 使用次数 用户评价 1 张恩聚 QQ发送可运行jar包 周楠 吉林大学在读研究生 5 ...
- 第二阶段Sprint冲刺会议1
进展:总结第一阶段冲刺成就,讨论第二阶段任务,要实现的主要功能,分工及任务认领.
- Task 5.1 电梯调度程序需求调研报告
1.任务概述: 1.1任务背景:试想一下,石家庄铁道大学基础教学楼的电梯配置如下:大厦有18层, 4部电梯,很多乘客使用这些电梯的日常(旅客重量:平均70公斤最大120公斤,最小45公斤).其他常量数 ...
- spring 原理
1.spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建.调用对象,Spring就是在运 ...