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 清帝之惑 ...
随机推荐
- x01.os.17: 换心术
在 linux 中编译 linux, 于是 linux 便有了再生能力.这不同于自然界的缓慢进化,可用神速来形容.—— 和强大的 windows 相抗衡,便是证明! 我在 ubuntu 中的编译方法如 ...
- [To be translated] Nova:libvirt image 的生命周期
翻译自:http://www.pixelbeat.org/docs/openstack_libvirt_images/ The main stages of a Virtual Machine dis ...
- jquery back to top 页面底部的返回顶部按钮
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 150923-碎觉要-PHP,Linux
今天懒懒的,还是每天都懒懒的. 早上下午都没有更.还好还有晚上更的想法和行动. 总结如下 1.PHP --wamp的一点配置问题,把根文件改为自己所要的文件夹.改动Apache的配置文件以及更改wam ...
- 单调队列优化DP,多重背包
单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...
- ANE接入平台心得记录(安卓)
开发环境:FlashBuilder4.7 AIR13.0 Eclipse 由于我懒得陪安卓的开发环境所以我下载了包含安卓SDK Manager的Eclipse,其实直接用FlashBuilder开发A ...
- java 24 - 9 GUI 之 给窗体换图标、设置启动在屏幕中间、更换皮肤
A.首先更改窗体左上角的图片 步骤一: 创建3个包,分别建立1个类 第一个是窗体的包,窗体类:设置窗体的主要布置和功能 第二个是资源包,图片:把想要改的图案拉进来 第三个是UI界面包,UI界面设计类: ...
- Permutation test 置换检验
来源:Public Library of Bioinformatics 显著性检验通常可以告诉我们一个观测值是否是有效的,例如检测两组样本均值差异的假设检验可以告诉我们这两组样本的均值是否相等(或者那 ...
- squid代理服务器根据代理IP路由
import os ips = os.popen("""ifconfig |grep 'inet addr:'|awk '{print $2}'| sed '$d'| s ...
- NOI2018准备 Day9
tjvj清北入学测试又打了一上午,暴力搜索得了部分分,dp全崩了,8道题凑了500分. 下午打了个速度赛,成绩未知,另外又做了1道题,这效率low到爆!!!