青蛙的约会(poj 1061)exgcd基础题
青蛙的约会
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。
我们把这两只青蛙分别叫做青蛙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基础题相关推荐
- 青蛙的约会(POJ 1061 扩展欧几里德算法)
POJ 1061 青蛙的约会 扩展欧几里德算法简单介绍及应用 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳, ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...
- POJ 1061青蛙的约会题解
POJ 1061青蛙的约会题解 网上似乎有不少此题的解法.我这个post和其他人的相比主要时想说下面几点. 1. 给出一个试图不死记硬背公式的思路; 2. 谈谈暴力解为什么看起来这么诱人,却无法通过; ...
- 数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)
青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...
- poj 1061青蛙的约会
青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问 ...
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
题目地址:POJ 1061 扩展GCD好难懂..看了半天,终于把证明什么的都看明白了..推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> # ...
- 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)
又在搬砖,本来以为这是一个追及问题,后来发现数据好像并不是那么个意思,后来把方程列出来,经过一个去模的操作,我们其实可以找到一点线索,那就是,一个经过变形的二元一次方程,那么在这种情况下,就可以利用扩 ...
- POJ 1061 青蛙的约会 (扩展欧几里得)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 97673 Accepted: 18409 Descripti ...
- 同余方程 ax≡1(mod b) POJ 1061 青蛙的约会
题目:求 ax%b=c ax\%b=c最小正整数x解,题目中的 c c=1. 先感谢两位大犇ngncmh和笑巧. 对于一般的问题,我们通常有两种做法: 1)1) Baby Step Giant Ste ...
最新文章
- 私有云Opetstack的创建与运用
- 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
- 第6章 数据存储全方案,详解持久化技术
- 插入脚注把脚注标注删掉_地狱司机不应该只是英国电影历史数据中的脚注,这说明了为什么...
- 结构设计模式 - 适配器设计模式
- coreldraw x8段落_CorelDRAW X8中文版从入门到精通
- 2016下半年网络规划设计师考试下午真题
- mysql启动和常用语法实战回顾
- 【bzoj3456】城市规划(多项式求逆+dp)
- Redis源码分析之双索引机制
- mac parallels desk 网络初始化失败
- 联想拯救者u盘安装linux系统,联想拯救者Y7000 U盘装系统win8教程
- 我市“一卡通”被授予国家金卡工程优秀应用成果奖
- MATLAB Appdesigner开发独立桌面App全流程(三):App的简单美化、打包、安装及卸载
- 面试总结2|all:华为社招 二面准备
- R语言与克朗巴哈alpha系数
- 互联网金融概念股龙头有哪些
- 树莓派离线语音唤醒snowboy
- 文件和文件夹的操作——文件夹的操作
- 【图】【热传】安全漏洞破解的奇迹