P1516 青蛙的约会

题意:在一个长为\(l\)的环上面有两只青蛙,一只出发点为\(x\),一次跳\(m\),另一只出发点为\(y\),一次跳\(n\),求相遇时间。

这个长为\(l\)的环不难想到了以\(l\)为模的同余。其实就是求这个\(t\):\(x+t\times m \equiv y + t \times n\pmod l\)

把这个变成普通式子:\(x - y + t(m - n) = k \times l\)

整理一下:\(t \times (m-n) - k \times l = y - x\)

这是一个二元不定方程,也就很自然地想到了另一个式子:\(t' \times (m-n) - k' \times l = gcd(m - n, l)\)

用肥鼠定理可以判断无解。套exgcd模板可以求出\(t'\)和\(k'\)。

上面两个式子如果有解的话一定是倍数关系的,所以有这么一个式子:\(\frac{gcd(m-n,l)}{y-x} = \frac{t'}{t}\),即\(t=\frac{t'(y-x)}{gcd(m-n,l)}\)。

但是\(t\)可能是负数,我们需要调整\(t\)为最小正整数解。

使用exgcd的通解公式:\(x=x_0+k\times \frac{b}{gcd(a,b)}\)。把里面的式子换成这道题的就行了。

有个需要注意的:

\(gcd\)是不支持负数的,所以这个\(y-x\)要确保为正,当这个\(y-x\)为负时,同时给\(m-n\)和\(y-x\)添负号。

代码:

#include<bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
#define ll long longll exgcd(ll a, ll b, ll &x, ll &y) {if(b == 0) {x = 1; y = 0; return a;} else {ll ret = exgcd(b, a % b, x, y);ll t = x;x = y;y = t - a / b * y;return ret;}
}
int main() {ll x, y, m, n, l; cin >> x >> y >> m >> n >> l;// x + m * t === y + n * t (mod l)// x - y + t * (m - n) = k * l// t * (m - n) - k * l = y - xll A = m - n, B = l, C = y - x;if(A < 0) {A = -A; C = -C;}ll g = exgcd(A, B, x, y);if(C % g) {cout << "Impossible" << endl;return 0;}x = x * C / g;// C : g = t : xll bg = B / g;if(bg < 0) bg = -bg;x = (x % bg + bg) % bg;cout << x << endl;return 0;
}

转载于:https://www.cnblogs.com/Garen-Wang/p/10403366.html

P1516 青蛙的约会 [exgcd]相关推荐

  1. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...

  2. 数论:扩展欧几里德(洛谷P1516 青蛙的约会)

    欧几里德 基本思想:gcd(q,r)=gcd(r,q%r); 证明,设q.r的最大公因数为a,则q=xa,r=ya,xy互质 不妨设x>y(显然如果小于会在一次gcd运算后交换) 则q%r=(x ...

  3. P1516 青蛙的约会

    传送门 根据题意可以列出方程: 设走了X步,已经绕了维度线Y圈 那么   nX-mX=LY+(x-y) 稍微转换一下: (n-m)X - LY = x-y 如果设  A=n-m,B=-L,C=x-y ...

  4. 洛谷 P1516 青蛙的约会

    https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...

  5. 青蛙的约会(poj 1061)exgcd基础题

    青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...

  6. 【洛谷P1516】青蛙的约会

    青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情 ...

  7. 数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)

    青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...

  8. POJ1061 青蛙的约会【扩展欧几里得算法】

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 126746   Accepted: 27392 Descript ...

  9. poj 1061青蛙的约会

    青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...

最新文章

  1. bash中case的用法
  2. Datawhale入选DataFountain优秀组织
  3. Linux Kernel TCP/IP Stack — L1 Layer — Physical NIC
  4. boost::sort模块实现整数排序测试
  5. linux查看文件的编码格式的方法 set fileencoding
  6. Cow Contest【最短路-floyd】
  7. 从经理的角度看领域设计
  8. 1b8c语言,C语言 - 王朝网络 - wangchao.net.cn
  9. 编写Javascript时的注意事项
  10. javascript代码
  11. Windows下Node.js安装及环境配置
  12. 2021年6月20日 是第111个父亲节,祝福所有的父亲节日快乐
  13. 编译Android源码:Exception in thread main java.lang.UnsupportedClassVersionError:报错解决
  14. 单片机lcm显示字符程序C语言,手把手教你学单片机的C语言程序设计(十六).pdf...
  15. PPT——快速制作图表(快速插入)
  16. html给文字添加阴影效果,如何设置样式之添加文字阴影、边框阴影或者添加自己的CSS...
  17. Android读取RAM,ROM,SD卡容量
  18. 苹果微信分身版ios_苹果iOS系统的设备怎样安装两个微信
  19. 使用potplayer播放器看直播
  20. git-rebasegit-squash

热门文章

  1. 查询linux kafka安装目录,Linux下安装并(单节点)配置启动Kafka
  2. SAP MM 采购发票上的价格与采购订单上价格的差异
  3. SAP MM MB5T可以用于查询在途库存
  4. 达摩院2021年十大科技趋势出炉:量子计算、脑机接口…
  5. AI构图:AI摄影的新未来
  6. 2020上半年收集到的优质AI文章 – 机器学习和深度学习
  7. 人工智能下一阶段,为啥要看互联网巨头?
  8. 机器学习模型太大难部署?这里有 3 个解决方案
  9. 人脸识别技术在支付场景的机遇与挑战
  10. 破解自动机器学习的黑匣子