</pre>背景康熙是中国历史乃至世界历史中最伟大的帝王之一,清除螯拜,撤除三藩,统一台湾,平定准葛尔叛乱;与此同时,出众的他也被世界各国遣清使臣所折服。康熙是历史上少有的全人,不仅文武兼得,而且在各各方面都有见地,比如说航海、数学、英语、构图、建筑等等。一个最好的例子可以证明:康熙当年演算代数题的草稿纸至今仍然保存完好。话说康熙掌权之后,每天都抽空做数学题,特别是无聊题。这些天,某某老师开始教他做一些奇怪的题目。在第一节课的时候,老师就问了康熙一个超BT的题目:描述话说西汉时期,汉武帝刘彻派遣张骞出使西域,欲同月氏国结交而共驱匈奴。同时,月氏国也欲同大汉结交,也派出使者康破伦出使大汉,可是因为月氏国对于大汉的认知甚少,康破伦同样向西出使大汉。一开始,张骞从大汉出发,康破伦从月氏国出发,两人都在同一纬度线上,张骞所处的经度为x,康破伦所处的经度为y;接下来,两人同时向西走,而且只能向西走,张骞每天走m公里,康破伦每天走n公里,且每天走路的速度不变,也不停下来休息;这样两人就在这一条长为L的纬度线上一直向西走。问:过了多少天之后张骞和康破伦会碰面,并磋商两国结交之事(所谓碰面,是指两人处在同一经度上)。这下,康熙犯难了,他还是个不大的青年,怎么可能做得出这么难的题目;但是,他又是统领全国的帝皇,怎么能在老师面前丢这么大一个面子。康熙想:不行!一定得把这个题做出来!(然后就有了下面这段记录)第一天,……第二天,…………第三天,………………第四天,……………………第五天,…………………………第六天,………………………………第七天,……………………………………!!!!!!!啊!第七天,康熙终于打了7个感叹号,得出了一个重要的结论!!!!!那就是——做不出来。(汗),没办法,他只有请教你,他的挚友,帮他解决这一难题。康熙答应你,如果你把这一题做出来了,你将得到御赐赏银一万万mod1两!$$$$$$$$-$$$$$$$$。为了改变你生活的现状——衣衫褴褛、闻鼠起舞、蟑螂为伴,你下定了决心——我一定得把这题解决!格式输入格式输入只包括一行5个整数x,y,m,n,L<p>其中0<x≠y < =2000000000,0 < m、n < =2000000000,0 < L < =2100000000。</p><p></p>输出格式<p>输出碰面所需要的天数,如果永远不可能碰面则输出一行"Impossible"。</p><p></p><p></p><p><span style="font-family:SimHei;"><span style="white-space:pre">  </span>解:这道题不难,虽然一开始没做对.这道题叙述的非常不好,众所周知,许多acm题都是穿着马甲,而它的内容,本质是一种结构,一种过程.</span></p><p><span style="font-family:SimHei;">这道题的马甲非常差劲,既然是两个人,他们当然是连续的行走,而不是一跳一跳的,像青蛙一样.北大OJ上面的"青蛙约会"那道题跟此题一样,但是人家那马甲就漂亮得多了.</span></p><p><span style="font-family:SimHei;">当然,看透马甲是一种本事,要善于找出杂乱之中的规律.这道题还可以这样描述:一个青蛙,在长为Length的赤道上,它每次只能向前跳dv这么远.现在他想到达他面前的dx处,为此,他不得不绕着赤道跳很多圈,最终有可能到达目的地.</span></p><p><span style="font-family:SimHei;">第一步:化简问题:转化成追击问题,求出来二者的dv和dx.这两个数都是正整数,求起来需要分类讨论,这是第一个难关.</span></p><p><span style="font-family:SimHei;">第二步:列出方程,其实是模线性方程:k*dv-p*length=dx.这里面k,p都是正数.表示追了k天之后,绕了地球p圈,才追上.</span></p><p><span style="font-family:SimHei;">第三步:用扩展欧几里得算法解方程,刘汝佳书上的扩展欧几里得写的非常精炼,一般人写不出来,其中巧妙之处在于通过传递引用参数交换两个数的位置.</span></p><p><span style="font-family:SimHei;">第四步:求出来k和p之后,如果dx不能整除dv和length的最大公约数d,那就说明Impossible</span></p><p><span style="font-family:SimHei;">第五步:否则,肯定能追上, 需要对k做一些工作.如果k>0,那就太好了;如果k<0,那就k+=length.这样一来k就变成正数了.实际上:</span></p><p><span style="font-family:SimHei;"><span style="white-space:pre">   </span> k*dv+p*length=dx          等价于(k*dv)%length=dx;</span></p><p><span style="font-family:SimHei;">        [(k+length)*dv]%length=dx;</span></p><p><span style="font-family:SimHei;"><span style="white-space:pre">    </span>把k变成正数之后,还要做一次乘法:dx/d,表示要走多少个周期,所以k*=(dx/d);</span></p><p><span style="font-family:SimHei;"><span style="white-space:pre">    </span>这样还没有完,因为length和dv的最大公约数是d,所以最多到达length/d个点,最多走length/d步.所以最终结果是k%(length/d);</span></p><p></p><p></p><p></p><pre name="code" class="cpp">#include<iostream>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
void gcd(int a,int b,int &d,int&x,int &y){if (b == 0){d = a;x = 1;y = 0;}else{gcd(b, a%b, d, y, x);y -= x*(a / b);}
}int main(){freopen("in.txt", "r", stdin);int x1, x2, v1, v2,len;cin >> x1 >> x2 >> v1 >> v2 >> len;int dx, dv;v1 %= len;v2 %= len; x1 %= len;x2 %= len;if (v1 < v2){ swap(v1, v2);swap(x1, x2);}dv = v1 - v2;if (x1<x2){dx = x2  - x1;}else{dx = x2+len-x1;}int d, k,p; gcd(dv,len, d,k,p);if (dx%d){cout << "Impossible" << endl;}else{  dv /= d;len /= d;if (k > 0){  cout << (dx*k / d)%len << endl;}else{    cout << ((len + k)*dx / d)%len << endl;}}return 0;
}

转载于:https://www.cnblogs.com/weiyinfu/p/5013887.html

vijos P1009清帝之惑之康熙相关推荐

  1. vijos P1009 清帝之惑之康熙

    用扩展欧几里得算法求解线性同余方程就可以了,要注意求出来的应该是最小非负数. 等价于求方程k(m-n)与(y-x)关于l同余,k为非负整数的解  方程:  k*(m-n)-ld=y-x  若y-x不是 ...

  2. [Vijos1009] 清帝之惑之康熙

    题目背景 康熙是中国历史乃至世界历史中最伟大的帝王之一,清除螯拜,撤除三藩,统一台湾,平定准葛尔叛乱:与此同时,出众的他也被世界各国遣清使臣所折服.康熙是历史上少有的全人,不仅文武兼得,而且在各各方面 ...

  3. Vijos 1010 清帝之惑之乾隆

    背景 乾隆,雍正的第四子,在位60年,退位后又当了三年太上皇,终年89岁. 乾隆即位之初,实行宽猛互济的政策,务实足国,重视农桑,停止捐纳,平定叛乱等一系列活动中,充分体现了他的文治武功,乾隆帝向慕风 ...

  4. vijos 1011 清帝之惑之顺治 (记忆化搜索)

    背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...

  5. exgcd-清帝之惑之康熙

    https://vijos.org/p/1009 这个exgcd我 复制 推一遍 对于ax+by=c 我们先算ax+by=(a,b) (这个是最大公约数) 然后把解乘上c/(a,b)即可: 所以显然当 ...

  6. P1011清帝之惑之顺治

    背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...

  7. 清亡之路(9):南北谈判和清帝退位

    解决了滦洲兵变之后,袁世凯更关心如何对付武昌的"叛军",以及相继独立的南方数十省,甚至还有北方数省.袁世凯明白,北洋新军再厉害,可能也打不过这么多省. 黎元洪为代表的南方认为,如果 ...

  8. 历史上康熙皇帝真的很喜欢微服私访吗?

    说起康熙皇帝我们都知道他被称为千古一帝,平三藩,收台湾,统一全国功绩卓著.可是在显赫的背后康熙皇帝还一直亲民的一面,那就是喜欢微服私访.那么康熙皇帝到底是否真的喜欢微服私访呢? 前几年由张国立主演的康 ...

  9. 清朝皇帝年表及1840年后清朝历史事件

    一.清朝皇帝年代顺序表 清朝皇帝按时间排列为: 1.努尔哈赤(太祖),年号天命,1616年登基,在位11年. 2.皇太极(太宗),年号天聪.崇德,1627年登基,在位10年. 3.福临(世祖),年号顺 ...

最新文章

  1. 编译+构建+链接+运行之间的关系分析
  2. 08.认证考试注意事项
  3. Rxjs BehaviorSuject 和 Observable 的区别
  4. postgresql点云las_点云模型_点云模型_模型_时空数据库_PolarDB PostgreSQL 云原生数据库 - 阿里云...
  5. Web前端开发CSS基础(2)
  6. 有感软件安装称呼的变化
  7. JS对cookie进行操作
  8. 【重点】剑指offer——面试题53:正则表达式匹配
  9. 禁止tomcat的Catina.out的累计输出
  10. C#读写日志文本文件
  11. win7系统如何安装python_python安装教程详解|python下载安装教程步骤
  12. Java基础语法结构
  13. 详解智慧城市排水管理系统整体方案
  14. Python爬取新笔趣阁小说
  15. 计算机网络应用基础总结,(完整版)计算机网络应用基础高教版对口高考复习资料总结...
  16. Hyper-V安裝筆記
  17. 语法分析实验ll算法c语言,实验5-LL语法分析程序的设计与实现(C语言)
  18. oracle_sod,sod: PDF.NET 的追求:代码的精简,开发、维护的简单与极致的运行效率!...
  19. Google I/O 2022: 促进知识和计算机技术发展
  20. [转]office 2016 4合1/3合1 专业版 增强版 精简绿色安装版

热门文章

  1. 面向对象第四单元总结和期末总结
  2. vitual dom实现(转)
  3. 差距只是客观存在的事实,与服不服无关。
  4. C#中只使用Invokerequired来判断是不是UI线程可靠吗?
  5. VC++6.0 按F1无法打开 MSDN 的解决办法
  6. ZooKeeper官方文档学习笔记04-ZooKeeper的Java实例
  7. 东航期货模拟交易brockerid(期货公司的客户号)
  8. 帆软报表跨域之插件开发中Controller中定义的方法实现CROS的GET跨域,且请求头带自定义属性
  9. Linux进程间同步和通信,linux进程间的同步方法
  10. 利用Numpy提取+处理数据