【题目链接】:http://hihocoder.com/problemset/problem/1303

【题意】

【题解】

/*
x % m[1] = r[1]
x % m[2] = r[2] x = k[1]*m[1]+r[1] ···①
x = k[2]*m[2]+r[2] ···② k[1]*m[1]+r[1]=k[2]*m[2]+r[2]
m[1]*k[1]-m[2]*k[2]=r[2]-r[1]
令A=m[1],B=m[2],C=r[2]-r[1],x=k[1],y = -k[2];
A*x+B*y=C
令t = gcd(A,B)
如果C%t!=0则无解
令A'=A/t,B'=B/t,C'=C/t
A'*x+B'y=C' 对于A'x+B‘y=1
求出x0,然后乘上C;
就是A'x+B'y=C'的一个特解了
x0 = x0*C;
然后这个时候x0可能为负值吧;
所以求最小的正值;
x0 = (x0%B'+B')%B';
就能算出来k[1],也即k[1]=x0,;
带回①式
x0= x0*m[1]+r[1]
将x0作为特解;
得到一个解系
x = x0+t*lcm(m[1],m[2]);
这样就相当于得到一个新的方程
X % lcm(m[1],m[2]) == x0 令M = lcm(m[1], m[2]), R = x0,则有新的模方程X mod M = R。
此时,可以发现我们将x mod m[1] = r[1],x mod m[2] = r[2]
合并为了一个式子X mod lcm(m[1], m[2]) = x。满足后者的X一定
满足前两个式子。 这里x0也取最小的正值吧
x0 = x0%lcm(m[1],m[2]);
if (x0<lcm(m[1],m[2])) x0+=lcm(m[1],m[2]); 如果再有一个方程
X % m[3] = r[3]
则可以再用相同的方法求出它的解系
最后输出那个x0就好了
*/

【Number Of WA】



2



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 110; int n;
LL m1,r1,m2,r2; LL gcd(LL a,LL b)
{
if (b==0)
return a;
else
return gcd(b,a%b);
} void ex_gcd(LL a,LL b,LL &x,LL &y)
{
if (b==0)
{
x = 1,y = 0;
return;
}
ex_gcd(b,a%b,y,x);
y-=a/b*x;
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use
cin >> n;
cin >> m1 >> r1;
rep1(i,2,n)
{
cin >> m2 >> r2; LL A = m1,B = m2,C = r2-r1;
LL t = gcd(m1,m2); if (C%t!=0) return cout << -1 << endl,0; A/=t,B/=t,C/=t; LL x0,temp;
ex_gcd(A,B,x0,temp);
x0=(C*x0%B+B)%B;//求出A'x+B'y=C'的最小的正值特解 x0 = x0*m1+r1;//x0=k[1],回带出模线性方程组的特解 LL lcm = m1/t*m2;
x0 = x0%lcm;
if (x0<0) x0+=lcm;//求出特解里面的最小正值 m1 = lcm,r1 = x0; if (i==n) cout << x0 << endl;
}
return 0;
}

【hihocoder 1303】模线性方程组的更多相关文章

  1. hihoCoder 1303 数论六·模线性方程组

    Description 求解模线性方程组, \(m_i\) 不互质. Sol 扩展欧几里得+中国剩余定理. 首先两两合并跟上篇博文一样. 每次通解就是每次增加两个数的最小公倍数,这对取模任意一个数都是 ...

  2. hiho一下 第九十七周 数论六·模线性方程组

    题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...

  3. Strange Way to Express Integers (一般模线性方程组)

    Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 8476   Accepted: 2554 Description Elin ...

  4. POJ 1061 青蛙的约会(拓展欧几里得算法求解模线性方程组详解)

    题目链接: BZOJ: https://www.lydsy.com/JudgeOnline/problem.php?id=1477 POJ: https://cn.vjudge.net/problem ...

  5. hdu 5755(高斯消元——模线性方程组模板)

    PS. 看了大神的题解,发现确实可以用m个未知数的高斯消元做.因为确定了第一行的情况,之后所有行的情况都可以根据第一行推. 这样复杂度直接变成O(m*m*m) 知道了是高斯消元后,其实只要稍加处理,就 ...

  6. HDU.3571.N-dimensional Sphere(高斯消元 模线性方程组)

    题目链接 高斯消元详解 /* $Description$ 在n维空间中给定n+1个点,求一个点使得这个点到所有点的距离都为R(R不给出).点的任一坐标|xi|<=1e17. $Solution$ ...

  7. POJ.2065.SETI(高斯消元 模线性方程组)

    题目链接 \(Description\) 求\(A_0,A_1,A_2,\cdots,A_{n-1}\),满足 \[A_0*1^0+A_1*1^1+\ldots+A_{n-1}*1^{n-1}\equ ...

  8. poj 2891 模线性方程组求解

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 8005   ...

  9. POJ 2981 Strange Way to Express Integers 模线性方程组

    http://poj.org/problem?id=2891 结果看了半天还是没懂那个模的含义...懂了我再补充... 其他的思路都在注释里 /********************* Templa ...

随机推荐

  1. 歌乐电子一道非常easy的笔试题目居然搞错了!!!

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI0NzQ2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  2. 零基础学python-2.24 一些经常使用函数

    今天我举一些经常使用的函数,让大家了解一下: 函数 作用 dir([obj]) 浏览对象的属性 help([obj]) 显示对象的文档字符串 ini([obj]) 将对象转为整形 len([obj]) ...

  3. UVa 572 - Oil Deposits (简单dfs)

    Description GeoSurvComp地质调查公司负责探測地下石油储藏. GeoSurvComp如今在一块矩形区域探測石油.并把这个大区域分成了非常多小块.他们通过专业设备.来分析每一个小块中 ...

  4. EOJ 3348 树的顺序存储结构

    前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. 编号 ...

  5. js设计模式-享元模式

    享元模式实际上是一种优化模式,目的在于提高系统的性能和代码的效率. 使用享元模式的条件:最重要的条件是网页中必须使用了大量资源密集型对象,如果只会用到了少许这类对象,那么这种优化并不划算.第二个条件是 ...

  6. codeforces 708ALetter Cyclic Shift

    2019-05-18 09:51:19 加油,加油,fightting !!! https://www.cnblogs.com/ECJTUACM-873284962/p/6375011.html 全为 ...

  7. Selenium的文件上传JAVA脚本

    在写文件上传脚本的时候,遇到了很多问题,包括元素定位,以及上传操作,现在总结下来以下几点: 1. 上传的控件定位要准确,必要时要进行等待 WebElement adFileUpload = drive ...

  8. oracle数据库rman备份与还原

    我是oracle 界的小白,由于公司领导要求,不得不硬着头皮在网上找rman备份还原的方法,废话不多说,具体看例子(window) 运行CMD: rman target 管理员账号/密码@orcl 备 ...

  9. C# CultureInfo.InvariantCulture

    今天在写代码的过程中发现了一个有意思的问题,我在写了一个日期格式转化的时候发现不同电脑的运行结果不一致. 代码如下 string str = this.tbTime.Text; if(string.I ...

  10. 创建一个netcore2.0和angular的项目并运行起来

    netcore2.0发布了,喜大普奔. 我们先下载SDK,请看张善友老师的这篇博客 http://www.cnblogs.com/shanyou/p/7363037.html 下载完之后 我用的vs2 ...