UVa12169 - Disgruntled Judge(模运算、拓展欧几里得)
来源:互联网 发布:python核心编程第二版 编辑:程序博客网 时间:2024/06/01 07:54
如果知道了a,就能算出x2,根据x3=(ax2+b)mod10001算出b。
然后可在O(T)时间内计算出整个序列。
如果在计算中发现和输入矛盾,则a非法,
因为a是0~10000的整数,即使枚举所有a,
时间效率也足够高。 枚举a,利用x1,x3求出b,
判断所有x的关系能不能满足a,b。
如何通过a,x1,x3求出b呢。
x3 = (a * x2 + b) % 10001;
联立2个式子
x3 = (a * (a * x1 + b) % 10001 + b ) % 10001;
x3 = (a * (a * x1 + b) + b) % 10001;
所以 x3 + 10001 * k = a * a * x1 + (a + 1) * b;
x3 - a * a * x1 = (a + 1) * b + 10001 * (-k);
这样就成了求 b 和 -k,满足这个式子,不就是扩展欧几里得的一般用法么?
#include <bits/stdc++.h>#define _ ios_base::sync_with_stdio(0);cin.tie(0);#define INF 0x3f3f3f3f#define eps 1e-6typedef long long LL;const double pi = acos(-1.0);const long long mod = 1e9 + 7;const long long Mod = 10001;using namespace std;LL x[10005];void gcd(LL a,LL b,LL &d,LL &x,LL &y){ if(!b) { d = a; x = 1; y = 0; } else { gcd(b, a % b, d, y, x); y -= x * (a/b); } return;}int main(){ ios_base::sync_with_stdio(false); cin.tie(0); //freopen("int.txt","r",stdin); //freopen("out.txt","w",stdout); int N; cin >> N; for(int i = 1;i <= N;i++) cin >> x[2 * i - 1]; LL a,b; for(a = 0;a < Mod;a++) { LL d,k,b; LL t = x[3] - a * a * x[1]; gcd(Mod,a + 1,d,k,b); if(t % d) continue; b = b * t / d; int ok = 1; for(int i = 2;i <= 2 * N;i++) { if(i & 1) { if(x[i] != (a * x[i - 1] + b) % Mod) { ok = 0; break; } } else x[i] = (a * x[i - 1] + b) % Mod; } if(ok) break; } for(int i = 1;i <= N;i++) printf("%lld\n",x[i * 2]); return 0;}
0 0
- UVa12169 - Disgruntled Judge(模运算、拓展欧几里得)
- UVa12169 - Disgruntled Judge(模运算)
- UVa12169 - Disgruntled Judge (扩展欧几里得)
- 【数论】[Uva12169]Disgruntled Judge
- 【NWERC2008】uva12169 Disgruntled Judge
- 例题10-2 UVa12169 Disgruntled Judge(拓展欧几里德)
- UVA.12169 Disgruntled Judge ( 拓展欧几里得 )
- 扩展欧几里得应用解不定方程(uva12169,Disgruntled Judge,NWERC 2008)
- UVa12169(拓展欧几里得)
- 【数论】Disgruntled Judge, NWERC 2008, UVa12169
- uva-12169&&hdu-2769-Disgruntled Judge 扩展欧几里得,模线性方程
- uvaoj 12169 Disgruntled Judge 扩展欧几里得算法
- Uva 12169 Disgruntled Judge 扩展欧几里得,暴力
- uva 12169 - Disgruntled Judge(暴力or欧几里得 )
- UVA 12169 Disgruntled Judge (扩展欧几里得)
- UVA-12169 Disgruntled Judge(扩展欧几里得)
- UVA 12169 Disgruntled Judge (拓展欧几里德)
- UVA 12196 Disgruntled Judge 拓展欧几里德算法
- gsoap入门:获取gsoap的错误信息
- db2安装完后,在/home/db2inst1/sqllib/include/目录下没有db2ApiDf.h等API头文件的问题
- 发送邮件的plsql代码(续)
- applet中archive?
- 微信支付
- UVa12169 - Disgruntled Judge(模运算、拓展欧几里得)
- C/C++中static关键字详解
- 【华为机试题】字符串查找
- inodes占用100%的问题
- poj 3061
- LeetCode 最长递增子序列的O(nlogn)详解
- OpenCV中简单矩阵运算
- 成长,一瞬间?
-  和 的区别