[POJ2891] Strange Way to Express Integers
2016-12-27 16:55
204 查看
题目描述
FJ正在读佳佳写的一本书,书中描述一种表示非负整数的方法:选择k个不同的正整数a1,a2,…,ak,对于某个整数m分别对ai求余对应整数ri,如果适当选择a1,a2,…,ak,那么整数m可由整数对组合(ai,ri)唯一确定。输入格式
输入包含多组测试数据,对于每组测试数据:第一行包含一个整数k;第2到k+1行每行包含两个整数ai,ri。输出格式
对于每组测试数据输出对应的非负整数m的值,若有多个m,则输出最小的一个;若无解,则输出-1。样例数据
样例输入
28 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
- Strange Way to Express Integers(poj2891线性同余方程组)
- 【POJ2891】【一般模线性方程 模板题】Strange Way to Express Integers
- 【poj2891-Strange Way to Express Integers】拓展欧几里得-同余方程组
- 【POJ2891】Strange Way to Express Integers
- poj2891 Strange Way to Express Integers 解线性同余方程的应用
- POJ2891 - Strange Way to Express Integers(模线性方程组)
- poj2891 Strange Way to Express Integers【解一元线性同余方程组模板】
- poj2891 Strange Way to Express Integers (中国剩余定理+拓展欧几里得)
- 【中国剩余定理-非互质】POJ2891[Strange Way to Express Integers]题解
- POJ2891 Strange Way to Express Integers(解多元线性同余方程)
- 解题报告 之 POJ2891 Strange Way to Express Integers
- POJ2891 Strange Way to Express Integers (扩展欧几里德)
- poj2891 Strange Way to Express Integers
- POJ2891:Strange Way to Express Integers——题解
- POJ2891 Strange Way to Express Integers [中国剩余定理]
- poj2891 Strange Way to Express Integers 扩展欧几里德的应用
- [数论] 同余方程组 poj2891 Strange Way to Express Integers
- POJ2891 Strange Way to Express Integers
- 【POJ2891】Strange Way to Express Integers——中国剩余定理(非互质)