http://poj.org/problem?id=1061

Description

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

Input

输入只包括一行5个整数s,t,p,q,L,其中s≠t < 2000000000,0 < p、q < 2000000000,0 < L < 2100000000。
(变量名和原题不同请注意)

Output

输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"
 

Sample Input

1 2 3 4 5

Sample Output

4

设x为最终结果,则我们能列出式子:

(p - q)x = t - s (mod L)

显然该式可以转化为:

(p - q)x + Ly = t - s

再变换一下变成:
ax + by = c

变成了熟悉的exgcd问题,正常求解即可。

#include<cstdio>
#include<cctype>
#include<iostream>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b) {
return b?gcd(b,a%b):a;
}
void exgcd(ll a,ll b,ll &x,ll &y){
if(b==){
x=;y=;
return;
}
exgcd(b,a%b,x,y);
ll temp;
temp=x;
x=y;
y=temp-(a/b)*y;
return;
}
int main(){
ll s,t,p,q,l;
cin>>s>>t>>p>>q>>l;
ll a=(p-q+l)%l,b=l,c=(t-s+l)%l,g=gcd(a,b);
if(c%g){
puts("Impossible");
return ;
}
a/=g;b/=g;c/=g;
ll x,y;
exgcd(a,b,x,y);
x=(x%b+b)%b;
x=x*c%b;
cout<<x;
return ;
}

最新文章

  1. linux下使用taskset设置进程cpu绑定不起作用
  2. 12-4mysql 查询
  3. 高仿bootstrap的layout效果(一)
  4. C++ STL stack和queue
  5. 在Mac OS X中使用VIM开发STM32(2)
  6. js作用域链
  7. Swift中可能失败的构造器的传播(调用)和重写
  8. FileOutputStream flush()
  9. Rest Project Performace Pressure Test
  10. java原生实现屏幕设备遍历和屏幕采集(捕获)等功能
  11. 2016-3-1 Mac下使用Hexo搭建Blog
  12. python --商品评价---- 数据表结构以及理解
  13. js 给定时间,如&#39;2013-08-30&#39;,换算和今天的天数差
  14. Qt界面设计基础
  15. 网页录像录音功能的实现之MediaRecorder的使用
  16. jupyter notebook的路径
  17. restframwork之序列化
  18. Real Time Render 4
  19. Mockito学习(zz)
  20. 5.C#知识点:ref和Out关键字浅谈

热门文章

  1. DMA是什么意思
  2. java 面向对象一
  3. 游戏人工智能 读书笔记 (四) AI算法简介——Ad-Hoc 行为编程
  4. 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)
  5. html div内第二行文字显示不下的时候才用省略号代替 css实现
  6. Qt-QML-Repeater-导航条
  7. python基础之变量和简单数据类型
  8. C++0x,std::move和std::forward解析
  9. leetcode-分割回文子串
  10. leetcode个人题解——#5 Container with most water