vijos P1009清帝之惑之康熙
</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; }
vijos P1009清帝之惑之康熙的更多相关文章
- 【扩展欧几里德】Vijos P1009 清帝之惑之康熙
题目链接: https://vijos.org/p/1009 题目大意: 两个人,一个在坐标x,每天走m,一个在坐标y,每天走n,坐标长L,问几天后碰面. 题目思路: [扩展欧几里德] 根据同余方程的 ...
- Vijos 1012 清帝之惑之雍正 平面最近点对(分治)
背景 雍正帝胤祯,生于康熙十七年(1678)是康熙的第四子.康熙61年,45岁的胤祯继承帝位,在位13年,死于圆明园.庙号世宗. 胤祯是在康乾盛世前期--康熙末年社会出现停滞的形式下登上历史舞台的.复 ...
- 【枚举】Vijos P1012 清帝之惑之雍正
题目链接: https://vijos.org/p/1012 题目大意: 给n个坐标(n<=100 000),求直线距离最短是多少.数据较大用long long 或 double 题目思路: [ ...
- 【动态规划】Vijos P1011 清帝之惑之顺治
题目链接: https://vijos.org/p/1011 题目大意: 给一张N*M的地图(N,M<=500),可从任一点开始沿上下左右走,只能走比当前低的地方.问最长能走多少格. 题目思路: ...
- 【高精度】Vijos P1010 清帝之惑之乾隆
题目链接: https://vijos.org/p/1010 题目大意: 多组数据,求R的n次幂(R为不超过9999.9的小数 n<=200)R保证占6位 不输出前导0和后缀0,整数就只输出整数 ...
- Vijos 1011 清帝之惑之顺治 记忆录式的动态规划(记忆化搜索)
背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...
- Vijos 1010 清帝之惑之乾隆
背景 乾隆,雍正的第四子,在位60年,退位后又当了三年太上皇,终年89岁. 乾隆即位之初,实行宽猛互济的政策,务实足国,重视农桑,停止捐纳,平定叛乱等一系列活动中,充分体现了他的文治武功,乾隆帝向慕风 ...
- vijos 1011 清帝之惑之顺治
背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...
- Vijos 1040 高精度乘法
描述 高精度乘法 输入:两行,每行表示一个非负整数(不超过10000位) 输出:两数的乘积. 样例1 样例输入1 99 101 样例输出1 9999 题解 这道题和之前的Vijos 1010 清帝之惑 ...
随机推荐
- <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合
一.前言 几个月前的看书笔记 ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- MMORPG大型游戏设计与开发(规范)
一件事如果没有规范.章法,那么做这件事起来往往会遇到许多难题,特别是在多人协作的时候,没有到规范通常让每个人多多少少都面临着头疼的困难.举个例子,多个人要做一桌美味的饺子,有买材料.做面皮.弄肉(菜) ...
- 网格弹簧质点系统模拟(Spring-Mass System by Euler Integration)
弹簧质点模型是利用牛顿运动定律来模拟物体变形的方法.如下图所示,该模型是一个由m×n个虚拟质点组成的网格,质点之间用无质量的.自然长度不为零的弹簧连接.其连接关系有以下三种: 1.连接质点[i, j] ...
- POJ2157Maze[DFS !]
Maze Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3818 Accepted: 1208 Description ...
- HDU2955 Robberies[01背包]
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Vijos1046观光旅游[floyd 最小环]
背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...
- Thread对象的yield(),wait(),notify(),notifyall()
Thread类中的主要方法: join()方法:让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等到此线程完成之后才可以继续执行. setDaemon():设置线程为后台线程,这样即使Ja ...
- Flex编译程序出现 Could not find compiled resource bundle 'SharedResources' for locale 'en_US'.
Flex编译程序出现 Could not find compiled resource bundle 'SharedResources' for locale 'en_US'. 而且静态类居然为nul ...
- [No000059]知道这些,你的时间会比别人多一大截
大噶猴,这里是最近不爱断案,爱上了号脉问诊的包大人.来看看下面这些症状,你中了几条? 字的快餐阅读 2.微博.微信.QQ空间.微博.微信.QQ空间……陷在这样的循环里 3.每天好像接收了很多信息,然而 ...