UVa 12169 - Disgruntled Judge(拓展欧几里德)
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3321
题意:
有个裁判出的题太难,总是没人做,所以他很不爽。有一次他终于忍不住了,
心想:“反正我的题没人做,我干嘛要费那么多心思出题?不如就输入一个随机数,输出一个随机数吧。”
于是他找了3个整数x1、a和b,然后按照递推公式xi = (a * x(i-1) + b) mod 10001计算出了一个长度为2T的数列,
其中T是测试数据的组数。然后,他把T和x1, x3,…, x(2T-1)写到输入文件中,x2, x4,…, x(2T)写到了输出文件中。
你的任务就是解决这个疯狂的题目:输入T, x1, x3,…, x(2T-1),输出x2, x4,…, x(2T)。
输入保证T≤100,且输入的所有x值为0~10000的整数。如果有多种可能的输出,任意输出一个即可。
分析:
由题意可得(下面的M为10001,k,k1,k2为任意整数):
x2 = a * x1 + b - k1 * M;
x3 = a * x2 + b - k2 * M;
联立上面两式得 M * k + (-a - 1) * b = a * a * x1 - x3;
所以我们可以枚举a,然后用拓展欧几里德求出b和其他值,再判断可行性即可。
代码:
#include <cstdio> typedef long long int LLI;
const LLI M = ;
int T;
LLI x[*+]; void exgcd(LLI m, LLI a, LLI& g, LLI& k, LLI& b) { // 拓展欧几里德
if(!a) g = m, k = , b = ;
else exgcd(a, m%a, g, b, k), b -= k * (m/a);
} bool judge(LLI a) {
LLI g, k, b, t = a * a * x[] - x[];
exgcd(M, -a-, g, k, b);
if(t % g) return false;
b *= t / g;
for(int i = ; i <= * T; i++) {
LLI j = (a * x[i-] + b) % M;
if(i & ) {
if(x[i] != j) return false;
} else x[i] = j;
}
return true;
} int main() {
scanf("%d", &T);
for(int i = ; i < * T; i += ) scanf("%lld", &x[i]);
for(LLI a = ; a < M; a++) if(judge(a)) break;
for(int i = ; i <= * T; i += ) printf("%lld\n", x[i]);
return ;
}
UVa 12169 - Disgruntled Judge(拓展欧几里德)的更多相关文章
- 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 ( 拓展欧几里得 )
UVA.12169 Disgruntled Judge ( 拓展欧几里得 ) 题意分析 给出T个数字,x1,x3--x2T-1.并且我们知道这x1,x2,x3,x4--x2T之间满足xi = (a * ...
- UVA 12169 Disgruntled Judge 扩展欧几里得
/** 题目:UVA 12169 Disgruntled Judge 链接:https://vjudge.net/problem/UVA-12169 题意:原题 思路: a,b范围都在10000以内. ...
- UVA 12169 Disgruntled Judge【扩展欧几里德】
题意:随机选取x1,a,b,根据公式xi=(a*xi-1+b)%10001得到一个长度为2*n的序列,奇数项作为输入,求偶数项,若有多种,随机输出一组答案. 思路:a和b均未知,可以考虑枚举a和b,时 ...
- UVA 12169 Disgruntled Judge(Extended_Euclid)
用扩展欧几里德Extended_Euclid解线性模方程,思路在注释里面了. 注意数据范围不要爆int了. /********************************************* ...
- 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又写了遍,看似会超时的代码交上去a了,果然实践是检验真理的唯一标准... #include <iostream ...
- UVa 12169 Disgruntled Judge 紫书
思路还是按照紫书,枚举a,得出b, 然后验证. 代码参考了LRJ的. #include <cstdio> #include <iostream> using namespace ...
- 【BZOJ-1965】SHUFFLE 洗牌 快速幂 + 拓展欧几里德
1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 541 Solved: 326[Submit][St ...
随机推荐
- java并发编程(2)线程池的使用
一.任务和执行策略之间的隐性耦合 Executor可以将任务的提交和任务的执行策略解耦 只有任务是同类型的且执行时间差别不大,才能发挥最大性能,否则,如将一些耗时长的任务和耗时短的任务放在一个线程池, ...
- WPF基础控件
1.所有基础控件结束(英文) http://www.dotnetperls.com/tooltip-wpf 2.wpf- DataGrid 常用属性和事件 3.
- 告别Flash——那些年我们追过的FusionCharts
随着FusionCharts最终放弃Flash这块蛋糕,不.或者已经不能叫做蛋糕了,现在Flash图表控件就只剩下AnyChart这一个独苗了,到底Flash还能走多远?这是Flash的末路吗? 众说 ...
- net core 发布到服务器的方式
---恢复内容开始(15:05:15)--- using (var scope = ServiceProvider.CreateScope()){ var aSubscriber = Activato ...
- 01.MD5加密
namespace _01.MD5加密 { class Program { static void Main(string[] args) { //MD5加密就是给想要的密码或者其它字符加密 //如果 ...
- vim的多标签
vim支持多标签页,可以在同一窗口同时打开多个文档, 两种方法: vim -d 通过vim --help后发现vim -d相当与vimdiff模式 例子: $ vim -d a.txt b.txt c ...
- JAVA版-微信高清语音.speex转.wav格式
功能介绍: PC端将.speex文件解码为*.wav文件 使用场景: 在MAC/Linux下Java JNI 调用C Speex,后端Java处理微信服务器下载下来的微信高清语音.speex解码为.w ...
- tmux使用技巧
1.tmux 进入tmux 2.在tmux中 按ctrl+b 表示要进行tmux操作了. 3. c -> create a session 4. "," -> ren ...
- pyhton基础中的要点一
1.python变量的命名规范: (1)变量必须以数字,字母,下划线的任意组合 (2)变量建议用驼峰标识,或下划线 (3)变量要有可描述性 (4)不能以数字开头 (5)不能用python的关键字 (6 ...
- Hibernate 性能优化一对一关联映射
概述: hibernate提供了两种映射一对一关联的方式:按照外键映射和按照主键映射. 下面以员工账号和员工档案为例 ,介绍两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1)保存员工档 ...