Description

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

  我们列出方程:(x+am)-(y+an)=bL。
移项得:a(m-n)+bL=y-x(bL之前的符号是加是减其实没有什么影响)。
之后设x'=m-n,y'=L,c=y-x。
之后化为ax'+by'=c。
然后使用扩欧,不过在扩欧之前要判定gcd(a,b)能否整除c,不能则无解,否则a,b,c都除以gcd(a,b)(最小正整数解)再进行exgcd。
最后我们把求出来的x进行调整使它成为最小正整数解。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5
 6 typedef long long ll;
 7
 8 using namespace std;
 9
10 ll xx,yy;
11
12 ll exgcd(ll n,ll m)
13 {
14     if(m==0)
15     {
16         xx=1,yy=0;
17         return n;
18     }
19     ll ans=exgcd(m,n%m),t=xx;
20     xx=yy,yy=t-n/m*yy;
21     return ans;
22 }
23
24 int main()
25 {
26     ll a,b,c,d,e;
27     scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e);
28     ll x=d-c,y=e,k=a-b;
29     ll g=exgcd(x,y);
30     if(k%g!=0){printf("Impossible\n");return 0;}
31     x/=g,y/=g,k/=g;
32     exgcd(x,y);
33     k=((k*xx)%e+e)%e;
34     if(!k)k=e;
35     printf("%lld",k);
36     return 0;
37 }

View Code

转载于:https://www.cnblogs.com/tuigou/p/4628399.html

【扩展欧几里得】Bzoj 1477:青蛙的约会相关推荐

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

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

  2. BZOJ 1477: 青蛙的约会

    扩展欧几里得 我好菜啊恶补一波 列出方程(t*n+x)-(t*m+y)=kL <=> (n-m)*t-kL=y-x 注意一下正负 #include<cstdio> #defin ...

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

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

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

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

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

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

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

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

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

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

  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 ...

最新文章

  1. 深入理解PHP原理之变量作用域
  2. 什么是mysql主从复制
  3. python3实现汉字转拼音
  4. 【设计模式】前端控制器模式
  5. Load-time relocation of shared libraries
  6. arraylist删除指定元素_面试官:谈谈常用的Arraylist和Linkedlist的区别
  7. [芦半山]Binder的异常机制
  8. LeetCode 第 206 场周赛(733/4491,前16.3%)
  9. CompletableFuture详解~异常处理
  10. java in thread main_JAVA报错:Exception in thread main……求帮助?
  11. struts过滤器和拦截器的区别
  12. 英特尔处理器的性能监控事件文件下载
  13. Linux echo
  14. mengento 数据库模型
  15. kill -9 和 kill -15 的区别
  16. 51Nod-1284 2 3 5 7的倍数【数位DP+记忆化搜索】
  17. zigbee 4:协调器/路由器/终端 建立/加入 网络
  18. 利用selenium获取接口数据
  19. c++11总结19——std::mutex
  20. 利用空间分析进行学校选址

热门文章

  1. 我愿意参加Qcon 2010大会,你愿意吗?
  2. 事件驱动的javascript
  3. AAAI 2020 | 北理工阿里文娱:你所看视频的介绍,可以用到这样的「图像描述」技术...
  4. 学Python可以用来干什么?就业情况究竟怎么样?
  5. 3D建模行业内幕及“钱”景
  6. 笔记 | 《机器学习》中特征选择与稀疏学习
  7. GitHub推出云端IDE,可在浏览器里使用VS Code了
  8. php内支持sqlite,PHP能不能和sqlite搭配
  9. python词云有什么用_使用Python定制词云
  10. matlab pdist如何实现,在MATLAB版本7中相当于pdist2