luogu P1516 青蛙的约会(线性同余方程扩展欧几里德)
题意


题解
做了这道题,发现扩欧快忘了。
根据题意可以很快地列出线性同余方程。
设跳了k次
x+mkΞy+nk(mod l)
(m-n)kΞ-(x-y)(mod l)
然后化一下
(m-n)k+(x-y)Ξ0(mod l)
也就是前面一坨是l的倍数
不妨设
(m-n)k+(x-y)=-tl
(m-n)k+tl=-(x-y)
我们要求的就是保证t<=0(因为我们设的-t倍的l,所以t<=0),k>=0时k的最小值
发现这是一个不定方程
根据裴蜀定理(这个定理搜狗输入法上没有)
当-(x-y)是gcd((m-n),t)的倍数时是有解的。(等式两边都乘-(x-y)/gcd就行了)且(m-n)k+tl=gcd((m-n),t)一定有整数解
所以我们用扩欧算出(m-n)k+tl=gcd((m-n),t)的一组特解和gcd
然后通过判断-(x-y)是不是gcd((m-n),t)的倍数判断有没有解。
假如有解我们就先保证(m-n)为正数根据k的通解公式k=-(x-y)/gcd*k0+h*l/gcd(h为整数)
然后求出最小的正数k就行了
然后这样做似乎没有保证t<=0
其实保证了
考虑通项公式。其实那个k0的系数-(x-y)/gcd
是因为我们要把(m-n)k+tl=gcd((m-n),t)化为-(x-y)/gcd(m-n)k+-(x-y)/gcdtl=-(x-y)给等式两边乘的
这样保证现在-(x-y)/gcd(m-n)k是大于等于-(x-y)的(当-(x-y)为正数)这样t<=0没什么问题。
当当-(x-y)为负数时我们发现-(x-y)/gcd(m-n)k小于等于-(x-y)此时t也变号了所以要求t>=0也没问题。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
long long x,y,n,m,l,xx,yy;
long long exgcd(long long a,long long b,long long &x,long long &y){
if(b==){
x=;
return a;
}
long long c=exgcd(b,a%b,x,y);
long long z=x;
x=y;y=z-(a/b)*y;
return c;
}
int main(){
scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
long long a=m-n;long long b=y-x;
if(a<){
a=-a;
b=-b;
}
long long gcd=exgcd(a,l,xx,yy);
if(b%gcd!=){
printf("Impossible");
}
else printf("%lld",(xx*(b/gcd)%(l/gcd)+(l/gcd))%(l/gcd));
return ;
}
luogu P1516 青蛙的约会(线性同余方程扩展欧几里德)的更多相关文章
- 解题报告:luogu P1516 青蛙的约会
题目链接:P1516 青蛙的约会 考察拓欧与推式子\(qwq\). 题意翻译? 求满足 \[\begin{cases}md+x\equiv t\pmod{l}\\nd+y\equiv t\pmod{l ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ...
- [Luogu P1516]青蛙的约会
按照题意,显然可以列出同余方程,k即为所求天数,再将其化为不定方程 ,那么对这个方程用扩展欧几里德算法即可得出k,q的一组解,但是方程有解的充要条件是(m – n) 和L不同时为零并且x – y是m ...
- ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Descr ...
- 青蛙的约会---poj1061(扩展欧几里德)
题目链接:http://poj.org/problem?id=1061 就是找到满足 (X+mt)-(Y+nt) = Lk 的 t 和 k 即可 上式可化简为 (n-m)t + Lk = X-Y;满足 ...
- 洛谷 P1516 青蛙的约会 解题报告
P1516 青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
- 洛谷——P1516 青蛙的约会
P1516 青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
- P1516 青蛙的约会
P1516 青蛙的约会x+mt-p1L=y+nt-p2L(m-n)t+L(p2-p1)=y-x令p=p2-p1(m-n)t+Lp=y-x然后套扩欧就完事了 #include<iostream&g ...
- P1516 青蛙的约会和P2421 [NOI2002]荒岛野人
洛谷 P1516 青蛙的约会 . 算是手推了一次数论题,以前做的都是看题解,虽然这题很水而且还交了5次才过... 求解方程\(x+am\equiv y+an \pmod l\)中,\(a\)的最小整数 ...
随机推荐
- 谁说NTFS不支持UEFI启动的?启动U盘放不了超过4G的文件怎么办?Server2016 Win10 U盘UEFI启动制作方法
大家都知道,我们平时做启动盘,用得最多的就是UltraISO(软碟通)这个工具了.用它我们可以很简单快速的把一个空白的普通U盘制作成一个PE启动U盘或系统U盘,然后用它来安装系统非常的方便,受到了广大 ...
- 搭建hadoop、hdfs环境--ubuntu(完全分布式)
最近在学习hadoop相关知识,就在本机上安装了hadoop,遇到了一些坑,也学到了不少.仅此记录我的安装过程,及可能遇到的问题.供参考.交流沟通见页末. 软件准备 > 虚拟机(VMware) ...
- luoguP2742 【模板】二维凸包 / [USACO5.1]圈奶牛 二维凸包
我们知道,纵坐标最小的点一定在凸包上(如果有多个,那它们都会被取到) 随便找一个纵坐标最小的点,将其他所有点按照这个点为原点极角排序,我们发现极角大的会在极角小的后面加入(感性认知一下) 考虑新(加入 ...
- BZOJ 2820: YY的GCD 莫比乌斯反演_数学推导_线性筛
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...
- html格式的文档转成word下载
当我们前端使用ueditor插件来让用户输入数据,保存至数据库.在另一个地方需要打印用户输入的内容的时候可以用到.因为要将ueditor带格式保存下来保存的就是html格式的内容,后台转化如下: @R ...
- (1)安装----anaconda3下配置pyspark【单机】
1.确保已经安装jdk和anaconda3.[我安装的jdk为1.8,anaconda的python为3.6] 2.安装spark,到官网 http://spark.apache.org/downlo ...
- CSS布局总结(三)
前言:今天学的有点少,主要是有点迷.... 这是昨天没写的 一.水平居中 .parent{ text-aglin:center; } .child{ display:inline-block; } . ...
- BZOJ 3672 [NOI2014]购票 (凸优化+树剖/树分治)
题目大意: 略 题面传送门 怎么看也是一道$duliu$题= = 先推式子,设$dp[x]$表示到达$x$点到达1节点的最小花费 设$y$是$x$的一个祖先,则$dp[x]=min(dp[y]+(di ...
- 2019-03-25 Python Pandas 基本操作
新建表 data1 = { "name": ["Tom", "Bob", "Mary", "James&quo ...
- [luogu] P3202 [HNOI2009]通往城堡之路(贪心)
P3202 [HNOI2009]通往城堡之路 题目描述 听说公主被关押在城堡里,彭大侠下定决心:不管一路上有多少坎坷,不管城堡中的看守有多少厉害,不管救了公主之后公主会不会再被抓走,不管公主是否漂亮. ...