[POJ2891] Strange Way to Express Integers
题目描述
FJ正在读佳佳写的一本书,书中描述一种表示非负整数的方法:选择k个不同的正整数a1,a2,…,ak,对于某个整数m分别对ai求余对应整数ri,如果适当选择a1,a2,…,ak,那么整数m可由整数对组合(ai,ri)唯一确定。
输入格式
输入包含多组测试数据,对于每组测试数据:第一行包含一个整数k;第2到k+1行每行包含两个整数ai,ri。
输出格式
对于每组测试数据输出对应的非负整数m的值,若有多个m,则输出最小的一个;若无解,则输出-1。
样例数据
样例输入
2
8 7
11 9
样例输出
31
说明
All integers in the input and the output are non-negative and can be represented by 64-bit integral types.
题目分析
标准欧几里得解线性方程组,要注意的就是。。无解情况退出前要读完所有当组数据。。
欧几里得解线性方程组
源代码
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
inline const long long Get_Int() {long long num=0,bj=1;char x=getchar();while(x<'0'||x>'9') {if(x=='-')bj=-1;x=getchar();}while(x>='0'&&x<='9') {num=num*10+x-'0';x=getchar();}return num*bj;
}
long long Exgcd(long long a,long long b,long long &x,long long &y) {if(b==0) {x=1;y=0;return a;}long long ans=Exgcd(b,a%b,x,y),tmp=x;x=y;y=tmp-a/b*y;return ans;
}
long long n;
long long Solve() {long long a1=Get_Int(),r1=Get_Int();for(int i=2; i<=n; i++) {long long a2=Get_Int(),r2=Get_Int(),a=a1,b=a2,c=r2-r1,x0,y0;long long gcd=Exgcd(a,b,x0,y0);if(c%gcd) { //无解for(int j=i+1; j<=n; j++)Get_Int(),Get_Int();return -1;}long long b1=b/gcd;x0=(x0*(c/gcd)%b1+b1)%b1;r1+=a1*x0; //带入原方程组的第一个a1*=(a2/gcd); }return r1;
}
int main() {while(scanf("%lld",&n)!=EOF)printf("%lld\n",Solve());return 0;
}
[POJ2891] Strange Way to Express Integers相关推荐
- POJ2891 Strange Way to Express Integers【扩展中国剩余定理】
题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * ...
- poj-2891(Strange Way to Express Integers)--中国剩余定理扩展欧几里得
题意:找到一个m,使得m%ai=ri,并且这个m最小 m = a1*x + r1; m = a2*y + r2; 可得:a1*x - a2*y = r2 - r1 可得:a1*x ≡ r2-r1(mo ...
- POJ2891 Strange Way to Express Integers (扩展欧几里德)
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia 题目大意 求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r ...
- POJ2891 Strange Way to Express Integers
线性同余方程 题目传送门 解线性同余方程的简单应用,注意要把数据读完再输出-1. 代码: #include<cstdio> #include<cstring> #include ...
- POJ2891——Strange Way to Express Integers(一元线性同余方程组)
由若干个一元线性同余方程组构成的方程组,叫做一元线同余方程组. 求解 我们可以将其统一划成a*x ≡ b(mod m)的形式,这样有利于算法的实现. 对于同于方程组的求解,其实质过程就是对于其中的同余 ...
- 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)
虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...
- 【poj2891】 Strange Way to Express Integers
poj.org/problem?id=2891 (题目链接) 题意:求解线性同余方程组,不保证模数一定两两互质. Solotion 用exgcd将俩个同余方程合并成一个 如合并n%M=R,n%m=r ...
- poj 2891 Strange Way to Express Integers 2012-09-05
http://poj.org/problem?id=2891 解线性模方程组. 比较坑爹,数据比较大,很容易溢出. 1 Program poj2891; 2 3 var m:int64; 4 5 a, ...
- poj 2891 Strange Way to Express Integers
题目:http://poj.org/problem?id=2891 思路:扩展欧几里得 #include <cstdio> #include <cstring> #includ ...
最新文章
- Android Studio 更换国内源下载依赖库
- [luoguP2896] [USACO08FEB]一起吃饭Eating Together(DP)
- 【数据结构与算法】之柱状图中最大矩形的求解思路和算法示例
- windows配置solr5.5.2(不通过tomcat,使用内置jetty)
- java 进制转换 十进制转二,八,十六进制
- 链表_有序链表(给数组排序-应用)
- ZZULOJ 1056:幸运数字
- No module named 'ConfigParser'
- Hive中Map数据类型转String类型,其中具体内容不变
- fedora16 解码方案
- windows10下搭建spark平台
- 极化码——比特翻转sc译码(SFSC译码)
- LPC1788 Fatfs读写U盘操作
- 【计算机基础】五笔字根分解图
- chkdsk 停滞_职业停滞–早期发现和治疗
- 03_D-H参数表的建立
- 老罗直播带货首秀成了么?
- zipoutputstream 进行解压缩时winrar提示:不可预料的压缩文件末端
- 教大家做蛋黄酥的做法
- 成都拓嘉启远:拼多多直通车推广怎么做才能有开好