https://www.luogu.org/problemnew/show/P1516#sub

题意还是非常好理解的.....

假如这不是一道环形的跑道而是一条直线,你会怎样做呢?

如果是我就会列一个方程,像

$$x+m \times k = y+n \times k $$

求出方程解得k值。

然而这是一个环形跑道,也就有了取模的问题,然而我们只需要稍微改变一下方程

$$x + m \times k = y + n \times k + l \times z [z \in \mathbb{Z} ]$$

z表示被%掉了多少圈,我们试着两边转移一下

$$(x-y)+(m-n) \times k = l \times z$$

我们定义$a=(x-y),b=(m-n)$

$$a +b \times k= l \times z $$

$$ bk+lz=a $$

那么我们的任务就变成了解出这个二元一次方程了。

首先判断$ a是否整除gcd(b,l) $,不整除则无解,否则有解的话就可以用扩展欧几里得求得解。

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
#define LL long long
LL xx,yy,n,m,x,y,a,b,l,r;
LL gcd(LL a,LL b)
{return !b?a:gcd(b,a%b);
}
LL exgcd(LL a,LL b,LL &x,LL &y)
{return !b?(x=1,y=0):(exgcd(b,a%b,y,x),y-=a/b*x);
}
int main()
{cin>>xx>>yy>>m>>n>>l;a=xx-yy;b=n-m;if(b<0)b=-b,a=-a;r=gcd(b,l);exgcd(b,l,x,y);//现在我们解出的是bx+lz=gcd(b,l)的解,输出答案是要扩大至a. if(a%r!=0)printf("Impossible");else  cout<<((x*(a/r))%(l/r)+(l/r))%(l/r);//这个答案我研究了好久,最后才发现这个模数是因为组这么多步以后//他们两个都回到了起始点.
//cout<<x*(a/r);
}

转载于:https://www.cnblogs.com/rmy020718/p/9766469.html

洛谷 P1516 青蛙的约会相关推荐

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

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

  2. P1516 青蛙的约会 [exgcd]

    P1516 青蛙的约会 题意:在一个长为\(l\)的环上面有两只青蛙,一只出发点为\(x\),一次跳\(m\),另一只出发点为\(y\),一次跳\(n\),求相遇时间. 这个长为\(l\)的环不难想到 ...

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

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

  4. 洛谷P1244青蛙过河

    洛谷P1244青蛙过河 题目描述 有一条河,左边一个石墩(A 区)上有编号为 1,2,-,n 的 n 只青蛙,河中有 k 个荷叶(C 区),还有 h 个石墩(D 区),右边有一个石墩(B 区),n 只 ...

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

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

  6. 洛谷P1244 青蛙过河 DP/思路

    又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...

  7. 青蛙的约会(洛谷-P1516)

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

  8. P1516 青蛙的约会

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

  9. 洛谷P1244青蛙过河题解

    我用的是C++来解 其实这道题很简单,只要弄清楚关系就行,和汉诺塔问题相似.不用细想顺序(青蛙就是乱跳),可将青蛙作为一个整体来想. 我们用f[h][k]表示h个石墩和k片荷叶最多的青蛙数 f[0][ ...

最新文章

  1. C# 发送Http请求 - WebClient类
  2. mysql redis 中间件_Docker快速搭建Mysql社区版,Redis,MongoDb、MQ等等中间件。
  3. 单片机复位后为什么要对sp重新赋值_51单片机系列之2点亮第一个led小灯
  4. ES6新特性_ES6的Rest参数---JavaScript_ECMAScript_ES6-ES11新特性工作笔记012
  5. [译] JavaScript 中的私有变量
  6. QT自定义QmessageBox对话框
  7. nbu备份win平台oracle,NBU备份ORACLE错
  8. iOS之线程(二)GCD
  9. 程序员必备 Windows 快捷操作大全
  10. Python 计算彩色图像信噪比
  11. 996,活着抑或死亡
  12. 第3集丨通往圣贤之路
  13. 请问怎么设置默认浏览器
  14. 【科普】USDT的三种链类型(Omni、ERC20、TRC20)
  15. 苹果6如何截屏_苹果商量里需要花6元,才能买到的游戏:论如何建立一个修仙门派,到底好不好玩...
  16. Ubuntu 20.04 美化终端
  17. 打开SQL2000安装包没有弹出安装界面
  18. java下载附件给(pdf、pptx、word、excel、图片)添加水印
  19. C++报错无效的预处理命令include_Chapter2:从C/C++的编译原理说起
  20. 机器学习实战:基于Scikit-Learn.Keras和TensorFlow(原书第2版) 奥雷利安·杰龙——环境搭建anaconda

热门文章

  1. 数据可视化组队学习:《Task02 - 艺术画笔见乾坤》笔记
  2. 【CyberSecurityLearning 75】DC系列之DC-6渗透测试(WordPress)
  3. ubuntu 中vi的使用方法
  4. 自定义函数strcomp(),实现两个字符串的比较
  5. 【C++提高班】c++数组遍历比较相邻的数值
  6. 【听哥一句劝,C++水很深,你把握不住啊!】C++提高班之 符与*符
  7. STM32开发 -- 蓝牙开发详解(1)
  8. C语言再学习 -- 时间函数
  9. DM8168心得之SD卡快速分区制作
  10. 读取CSV内容,根据不同的图片标签放到指定文件夹