两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 
我们把这两只青蛙分别叫做青蛙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

思路:我们可以将其化成线性同余方程(m-n)*t =(x-y) (mod L) ,接下来我们去求解。首先可以得到最大公约数d,然后得到一组特解设为x0,y0;对于一般的方程ax+by=c有解的条件是d|c,接下来用x0乘上c/d,就得到了方程的特解。

另外为什么要取模,下面有证明,另外有一篇论文专门阐述了这个问题,感兴趣的戳链接

#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 1e7 + 10;
ll exgcd(ll a, ll b, ll &x, ll &y)
{if(b == 0){x = 1, y = 0;return a;}ll q = exgcd(b, a%b, y, x);y -= a/b*x;return q;
}int main()
{ll x, y, m, n, l;scanf("%lld%lld%lld%lld%lld", &x, &y, &m, &n, &l);ll x0, y0;ll d = exgcd(n - m, l, x0, y0);  //求出来最大公约数if((x - y)%d)             //判断是否有解{printf("Impossible\n");return 0;}x0 *= (x - y)/d;         //求出来特解ll r = l/d;x0 = (x0%r + r)%r;printf("%lld\n", x0);return 0;
}

POJ1061-青蛙的约会【扩展欧几里得】相关推荐

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

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

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

    题目链接:点击查看 题目大意:两只青蛙在一个单向循环数轴上跳动,给出初始位置和每秒跳动的距离以及数轴长度,问是否可以相遇,若能相遇求出最小时间 题目分析:自从第一次接触扩展欧几里得以来已经有半年时间了 ...

  3. JZYZOJ1371 青蛙的约会 扩展欧几里得 GTMD数论

    http://172.20.6.3/Problem_Show.asp?id=1371 题意是两个青蛙朝同一个方向跳 http://www.cnblogs.com/jackge/archive/2013 ...

  4. bzoj 1477 青蛙的约会 拓展欧几里得(详细解析)

    大水题: 题目戳这里:http://www.lydsy.com/JudgeOnline/problem.php?id=1477 这道题我们分析在一个数轴上有两只青蛙,这个数轴是首尾交接的,所以可以一直 ...

  5. J - 青蛙的约会(扩展欧几里得)

    https://vjudge.net/contest/218366#problem/J 第一步追及公式要写对:y+nk-(x+mk)=pL => (n-m)k+lp=x-y 可以看出扩展欧几里得 ...

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

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

  7. poj-青蛙的约会(扩展欧几里得)nyoj-小柯的约会

    由题意可列出方程 x + m * s - (y + n * s) = k * l; 化简得   (n-m)*s + k*l = x - y 化简得   (n-m)*s = x - y (mod l); ...

  8. 欧几里得定理与扩展欧几里得定理

    欧几里的定理(辗转相除法): gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数 证明: 设 a > b c = a%b a = k * b + c (k为某个整 ...

  9. 求解线性同余方程--扩展欧几里得

    资料来源:https://blog.csdn.net/ //求解ax=b(mod m) 返回0为无解,否则返回gcd(a,m)个mod m意义下的解,用X[]存 int mod(int a, int ...

  10. 欧几里得 扩展欧几里得

    欧几里得  &  扩展欧几里得 时间复杂度T(n):O(log2n); 空间复杂度S(n):O(n); Advantages: 1.    时间复杂度不高,和普通欧几里得一样: 2.    代 ...

最新文章

  1. 百度程序员妻子质疑老公不忠!每天很晚回家!周五下班不回家,说领导带他喝酒!结婚一年就出轨?...
  2. OpenCV java 图片处理,蒙太奇图片(13)
  3. Win32字符串处理函数
  4. led大屏按实际尺寸设计画面_年会活动要用LED大屏还是投影?专业行家都是看这些数据。...
  5. java 参数命名冲突_Java中的命名参数
  6. Python随机数生成方法
  7. chartjs和echartsjs库简介
  8. Linux——k8s命令别名修改
  9. 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第二部分(封装,抽象,继承)...
  10. java map原理_Java HashMap底层原理分析
  11. python装饰器详解-python 装饰器详解
  12. HCIE Security 2020.12.04面试战报
  13. 第七章 课后习题P206
  14. nginx 配置反向代理
  15. 制作学术PPT的注意事项如何制作模板(附模板下载链接)
  16. 总结Windows查看产品密匙方法
  17. php fatal 和php error,从PHP Fatal error: Uncaught Error: Class '' not found in php:说起
  18. 打开我的计算机我的文档不见,win10系统我的文档不见了的设置教程
  19. 计算机必须设置默认打印机,电脑系统怎么默认打印机 默认打印机的设置教程...
  20. ML和PR相关书籍及下载

热门文章

  1. 大数据信息资料采集:阿里巴巴1688电商网站货源产品信息采集
  2. 超级码力在线编程大赛初赛 第二场
  3. mate20por3d人脸识别_华为Mate 20 Pro的前置3D结构光,除了人脸识别还带来了什么?...
  4. 外部css样式不生效的原因
  5. python之旅六【第六篇】模块
  6. [codeforces 718E]Matvey's Birthday
  7. 12月30日学习总结
  8. 彻底解决 webpack 打包文件体积过大
  9. 多台仪器同步测量软件,ATECLOUD智能云测试平台
  10. 当今app行业 比较流行的 简称 汇总