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 清帝之惑 ...
随机推荐
- oops call trace 解析
Call Trace: [ 221.634988] [<ffffffff8103fbc7>] ? kmld_pte_lookup+0x17/0x60 [ 221.635016] [ ...
- Altium Designer 出现错误提示(警告)adding items to hidden net GND/VCC
一般出现这个提示,不是错误. 可以取消net 网格标号 这样就不会报这个警告了. 还可以设置规则,不让它报告. 点击确定,但是再次打开工程时有得警告这个错误了.我想,还是取消NET标注.
- 入门 ARM 汇编(二)—— 寻址方式
忧愁他整天拉着我的心,像一个琴师操练他的琴:悲哀像是海礁间的飞涛:看他那汹涌,听他那呼号!—— 徐志摩·四行诗一首 ilocker:关注 Android 安全(新手) QQ: 2597294287 立 ...
- xsd.exe的使用
xsd.exe的使用 XML文件生成XSD文件 xsd myFile.xml /outputdir:myOutputDir XSD文件生存实体类 xsd <你的XSD路径>.xsd / ...
- label与input间距的小问题
先码后文 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- Core Dump [Linux]
I have known Core-Dump for a long time. But I just know it little. Now, I am about to study it.
- leetcode-Combinations 复习复习排列组合
Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2 ...
- Hibernate一对一关联映射配置
一.一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1 ...
- C# 事件编程在游戏开发的应用
2D碰撞检测:http://wenku.baidu.com/view/45544cfcfab069dc50220145.html 1.Action System.Action 等于快捷创建一个委托 2 ...
- android gridview画分割线,如图:
1.先上图: 2.具体实现代码: public class LineGridView extends GridView { public LineGridView(Context context) { ...