题意:已知2只青蛙的起始位置 a,b 和跳跃一次的距离 m,n,现在它们沿着一条长度为 l 的纬线(圈)向相同方向跳跃。问它们何时能相遇?(好有聊的青蛙 (΄◞ิ౪◟ิ‵) *)永不相遇就输出"Impossible"。(蠢得可怜 -_-!)

解法:用拓展欧几里德求同余方程的最小正整数解。(a+mx)-(b+nx)=k*l (k表示圈数) → (m-n)x=k*l+b-a → (m-n)x=b-a(mod l)。当然其实=(b-a)%l 更准确,但反正都是模,也没有关系啦。于是就像上题一样求了。

P.S.代码中有一处加了%p,和没加,时间差别还挺大的......但上一题又不怕......*( ̄_ ̄)*

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 #define N 2000000000
7 typedef long long LL;
8
9 LL mabs(LL x) {return x>0?x:-x;}
10 LL exgcd(LL a,LL b,LL& x,LL& y)
11 {
12 if (!b) {x=1,y=0; return a;}
13 LL tx,ty,d;
14 d=exgcd(b,a%b,tx,ty);
15 x=ty,y=tx-(a/b)*ty;
16 return d;
17 }
18 int main()
19 {
20 LL aa,bb,m,n,l;
21 scanf("%I64d%I64d%I64d%I64d%I64d",&aa,&bb,&m,&n,&l);
22 LL a,b,c,x,y,p;
23 a=m-n,b=l,c=bb-aa,p=l;
24 LL d=exgcd(a,b,x,y);
25 if (c%d!=0) printf("Impossible\n");
26 else
27 {
28 x=(x*(c/d))%p;//厉害了!删了%p,就从0ms变到16ms了
29 LL t=mabs(b/d);
30 x=(x%t+t)%t;
31 printf("%I64d\n",x);
32 }
33 return 0;
34 }

最新文章

  1. 日常css技巧小结(1)--背景透明度改变对内容无影响
  2. iOS - Json解析精度丢失处理(NSString, Double, Float)
  3. 在oracle中通过connect by prior来实现递归查询!
  4. 贴一段shell代码
  5. Call C# in powershell
  6. Android开发时提示Your project contains error(s),please fix them be
  7. Laravel入门笔记
  8. 解决 mac ssh空闲 连接断开问题
  9. Android_Intent_note
  10. 工具系列之Sublime Text 3 使用总结
  11. 【Android Studio】没有先安装JDK
  12. 关闭钩子(shutdown hook)的作用
  13. iOS切换window根控制器 (转)
  14. sql按in中集合排序
  15. UVA 12075 - Counting Triangles(容斥原理计数)
  16. 服务器编程入门(5)Linux服务器程序规范
  17. 我的Java设计模式-单例模式
  18. 使用STM32Cube在STM32F7开发板上实现SD+Freertos+Fatfs
  19. ajax的网上解析
  20. tp5 设置layui分页

热门文章

  1. 笔记:学习go语言的网络基础库,并尝试搭一个简易Web框架
  2. Tomcat配置上遇到的一些问题
  3. 【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)
  4. WIN7系统没有USB驱动和以太网驱动如何操作
  5. SpringBoot Logback无法获取配置中心属性
  6. URL重定向 - Pikachu
  7. ctfhub技能树—信息泄露—hg泄露
  8. 什么是xss攻击
  9. 爬虫学习(二)requests模块的使用
  10. Spring AOP介绍与使用