JDOJ-1194: VIJOS-P1009 清帝之惑之康熙

1194: VIJOS-P1009 清帝之惑之康熙

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 376  Solved: 122
[Submit][Status][Web Board]

Description

        话说西汉时期,汉武帝刘彻派遣张骞出使西域,欲同月氏国结交而共驱匈奴。同时,月氏国也欲同大汉结交,也派出使者康破伦出使大汉,可是因为月氏国对于大汉的认知甚少,康破伦同样向西出使大汉。一开始,张骞从大汉出发,康破伦从月氏国出发,两人都在同一纬度线上,张骞所处的经度为x,康破伦所处的经度为y;接下来,两人同时向西走,而且只能向西走,张骞每天走m公里,康破伦每天走n公里,且每天走路的速度不变,也不停下来休息;这样两人就在这一条长为L的纬度线上一直向西走。问:过了多少天之后张骞和康破伦会碰面,并磋商两国结交之事(所谓碰面,是指两人处在同一经度上)。

这下,康熙犯难了,他还是个不大的青年,怎么可能做得出这么难的题目;但是,他又是统领全国的帝皇,怎么能在老师面前丢这么大一个面子。康熙想:不行!一定得把这个题做出来!(然后就有了下面这段记录) 

第一天,…… 

第二天,…………

第三天,……………… 

第四天,…………………… 

第五天,………………………… 

第六天,……………………………… 

第七天,……………………………………!!!!!!! 

啊!第七天,康熙终于打了7个感叹号,得出了一个重要的结论!!!!!那就是——做不出来。(汗),没办法,他只有请教你,他的挚友,帮他解决这一难题。康熙答应你,如果你把这一题做出来了,你将得到御赐赏银一万万两!

 
 
-
 
 
。为了改变你生活的现状——衣衫褴褛、闻鼠起舞、蟑螂为伴,你下定了决心——我一定得把这题解决!

Input

        输入只包括一行5个整数x,y,m,n,L         其中0< x≠y  <   =2000000000,0  <   m、n  <   =2000000000,0  <   L  <   =2100000000。

Output

        输出碰面所需要的天数,如果永远不可能碰面则输出一行" Impossible" 。

Sample Input

1 2 3 4 5

Sample Output

4
总结:扩欧水题
列出方程
x + m * t - y - n * t = k * l
(m - n) * t - k * l = y - x
用扩展欧几里德求出t即可
注意讨论一下正负
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>

using namespace std;
#define ll long long

ll A, B, m, n, l, x, y;

ll exgcd(ll a, ll b, ll&x, ll&y) {
	if(b == 0) {
		x = 1; y = 0; return a;
	} ll d = exgcd(b, a % b, y, x);
	y -= (a / b) * x; return d;
}

int main() {
	scanf("%lld%lld%lld%lld%lld", &A, &B, &m, &n, &l);
	ll tm1 = B - A, tm2 = m - n, d;
	if(tm1 < 0) {
		tm1 = -tm1; tm2 = - tm2;
	}
	if(tm2 < 0) {
		d = exgcd(-tm2, l, x, y);
		x = -x;
	} else d = exgcd(tm2, l, x, y);
	if(tm1 % d) printf("Impossible\n");
	else {
		ll r = l / d;
		x = ((x * (tm1 / d)) % r + r) %r;
		printf("%lld\n", x);
	}
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/oi-forever/p/8977289.html
今日推荐