青蛙的约会

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。
Input
输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。
Output
输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"
Sample Input
1 2 3 4 5
Sample Output
4

题目解析

exgcd入门题目,今天来回顾一下,之前做的时候其实是一知半解的,回到题目,两只青蛙从2个地方开始跳,有2个跳的距离,问几次之后能相遇,题目实际上可以化简为:x+mt=y+nt+zl;其中t和l为任意整数,我们把这个式子按照已知量进行化简:
(n-m)*t+z*l=x-y;我们可以另n-m=a,x-y=c,l=b;原式子就会变成a*t+b*z=c;就变成了一个二元一次方程,那么我们要求的就是这个方程t的最小正整数解。
到这里已经解析完了,那么接下来就是用算法,exgcd的问题,exgcd实际上就是求的一个二元一次方程组的解,再这里不做太多解析,大概阐述一下我们的工作手段,我们用exgcd的板子可以求得一个a1*t1+b1*z1=1的解,a1和b1分别为a/gcd(a,b),b/gcd(a,b);然后得到原始式子的通解公式
t=t1*(c/gcd(a,b))+h*b1,其中h为任意整数,那么这题就迎刃而解了。
附上大佬的exgcd的详细解析:https://www.cnblogs.com/yuelingzhi/archive/2011/08/13/2137582.html

ac代码

#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
ll ans,x,y;
ll exgcd(ll a,ll b,ll &x, ll &y)
{if(!b){x=1;y=0;return a;}ans=exgcd(b,a%b,x,y);ll t=x;x=y;y=t-a/b*y;return ans;
}
int main(){ll m,n,x1,y1;ll a,b,c;scanf("%lld%lld%lld%lld%lld",&x1,&y1,&m,&n,&b);a=n-m;c=x1-y1;if(a<0){       a=-a;c=-c;}exgcd(a,b,x,y); if(c%ans==0){b=b/ans;c=c/ans;x=((x*c)%b+b)%b;printf("%lld\n",x);}else {printf("Impossible\n"); }
}

青蛙的约会(poj 1061)exgcd基础题相关推荐

  1. 青蛙的约会(POJ 1061 扩展欧几里德算法)

    POJ 1061 青蛙的约会 扩展欧几里德算法简单介绍及应用 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳, ...

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

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

  3. POJ 1061青蛙的约会题解

    POJ 1061青蛙的约会题解 网上似乎有不少此题的解法.我这个post和其他人的相比主要时想说下面几点. 1. 给出一个试图不死记硬背公式的思路; 2. 谈谈暴力解为什么看起来这么诱人,却无法通过; ...

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

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

  5. poj 1061青蛙的约会

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

  6. POJ 1061 青蛙的约会(扩展GCD求模线性方程)

    题目地址:POJ 1061 扩展GCD好难懂..看了半天,终于把证明什么的都看明白了..推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> # ...

  7. 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)

    又在搬砖,本来以为这是一个追及问题,后来发现数据好像并不是那么个意思,后来把方程列出来,经过一个去模的操作,我们其实可以找到一点线索,那就是,一个经过变形的二元一次方程,那么在这种情况下,就可以利用扩 ...

  8. POJ 1061 青蛙的约会 (扩展欧几里得)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 97673   Accepted: 18409 Descripti ...

  9. 同余方程 ax≡1(mod b) POJ 1061 青蛙的约会

    题目:求 ax%b=c ax\%b=c最小正整数x解,题目中的 c c=1. 先感谢两位大犇ngncmh和笑巧. 对于一般的问题,我们通常有两种做法: 1)1) Baby Step Giant Ste ...

最新文章

  1. 私有云Opetstack的创建与运用
  2. 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
  3. 第6章 数据存储全方案,详解持久化技术
  4. 插入脚注把脚注标注删掉_地狱司机不应该只是英国电影历史数据中的脚注,这说明了为什么...
  5. 结构设计模式 - 适配器设计模式
  6. coreldraw x8段落_CorelDRAW X8中文版从入门到精通
  7. 2016下半年网络规划设计师考试下午真题
  8. mysql启动和常用语法实战回顾
  9. 【bzoj3456】城市规划(多项式求逆+dp)
  10. Redis源码分析之双索引机制
  11. mac parallels desk 网络初始化失败
  12. 联想拯救者u盘安装linux系统,联想拯救者Y7000 U盘装系统win8教程
  13. 我市“一卡通”被授予国家金卡工程优秀应用成果奖
  14. MATLAB Appdesigner开发独立桌面App全流程(三):App的简单美化、打包、安装及卸载
  15. 面试总结2|all:华为社招 二面准备
  16. R语言与克朗巴哈alpha系数
  17. 互联网金融概念股龙头有哪些
  18. 树莓派离线语音唤醒snowboy
  19. 文件和文件夹的操作——文件夹的操作
  20. 【图】【热传】安全漏洞破解的奇迹

热门文章

  1. android studio 编译Telegram源码
  2. 基于Linux的树莓派和电脑之间的串口通信编程
  3. 牛客网C语言 算学分绩
  4. cr全称是什么意思,城域网中的AC、BRAS、SW、SR、CR是什么意思
  5. MATLAB实现三角剖分(Delaunay)算法
  6. Windows 10 64位系统下Neo4j安装教程(2021.1.13)
  7. 消息队列 | java简单实现
  8. 完美解决Xmind打开乱码的问题
  9. 从奶茶品牌【茶颜悦色】看互联网的品牌保护
  10. 敏捷仪式感之:敏捷宣传栏