1477: 青蛙的约会
生活随笔
收集整理的這篇文章主要介紹了
1477: 青蛙的约会
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1477: 青蛙的約會(huì)
Time Limit:?2 Sec??Memory Limit:?64 MBSubmit:?261??Solved:?164
[Submit][Status][Discuss]
Description
兩只青蛙在網(wǎng)上相識(shí)了,它們聊得很開(kāi)心,于是覺(jué)得很有必要見(jiàn)一面。它們很高興地發(fā)現(xiàn)它們住在同一條緯度線上,于是它們約定各自朝西跳,直到碰面為止??墒撬鼈兂霭l(fā)之前忘記了一件很重要的事情,既沒(méi)有問(wèn)清楚對(duì)方的特征,也沒(méi)有約定見(jiàn)面的具體位置。不過(guò)青蛙們都是很樂(lè)觀的,它們覺(jué)得只要一直朝著某個(gè)方向跳下去,總能碰到對(duì)方的。但是除非這兩只青蛙在同一時(shí)間跳到同一點(diǎn)上,不然是永遠(yuǎn)都不可能碰面的。為了幫助這兩只樂(lè)觀的青蛙,你被要求寫一個(gè)程序來(lái)判斷這兩只青蛙是否能夠碰面,會(huì)在什么時(shí)候碰面。 我們把這兩只青蛙分別叫做青蛙A和青蛙B,并且規(guī)定緯度線上東經(jīng)0度處為原點(diǎn),由東往西為正方向,單位長(zhǎng)度1米,這樣我們就得到了一條首尾相接的數(shù)軸。設(shè)青蛙A的出發(fā)點(diǎn)坐標(biāo)是x,青蛙B的出發(fā)點(diǎn)坐標(biāo)是y。青蛙A一次能跳m米,青蛙B一次能跳n米,兩只青蛙跳一次所花費(fèi)的時(shí)間相同。緯度線總長(zhǎng)L米?,F(xiàn)在要你求出它們跳了幾次以后才會(huì)碰面。Input
輸入只包括一行5個(gè)整數(shù)x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。Output
輸出碰面所需要的跳躍次數(shù),如果永遠(yuǎn)不可能碰面則輸出一行"Impossible"Sample Input
1 2 3 4 5Sample Output
4HINT
Source
?
題解:經(jīng)典的擴(kuò)展歐幾算發(fā),沒(méi)記錯(cuò)的話我貌似在poj上A過(guò)此題= = 1 /************************************************************** 2 Problem: 1477 3 User: HansBug 4 Language: Pascal 5 Result: Accepted 6 Time:0 ms 7 Memory:224 kb 8 ****************************************************************/ 9 10 type 11 vec=record 12 x,y:int64; 13 end; 14 var 15 i,j:longint; 16 k,l,m,n,x,y,x1,x2,x3:int64; 17 a1,a2:vec; 18 function ex_gcd(a,b:int64):vec; 19 var 20 a1,a2:vec; 21 begin 22 if b=0 then 23 begin 24 a1.x:=1;a1.y:=0; 25 ex_gcd:=a1 26 end 27 else 28 begin 29 a1:=ex_gcd(b,a mod b); 30 a2.x:=a1.y; 31 a2.y:=a1.x-(a div b)*a1.y; 32 ex_gcd:=a2; 33 end; 34 end; 35 function gcd(x,y:int64):int64; 36 var 37 z:int64; 38 begin 39 while y<>0 do 40 begin 41 z:=x mod y; 42 x:=y; 43 y:=z; 44 end; 45 gcd:=x; 46 end; 47 begin 48 readln(x,y,m,n,l); 49 a1:=ex_gcd(m-n,-l); 50 k:=gcd(m-n,-l); 51 if ((y-x) mod k)<>0 then 52 begin 53 writeln('Impossible'); 54 halt; 55 end; 56 x1:=(y-x) div k; 57 a1.x:=a1.x*x1; 58 a1.y:=a1.y*x1; 59 if a1.x>0 then a1.x:=a1.x mod l else a1.x:=((a1.x mod l)+2*l) mod l; 60 writeln(a1.x); 61 end.?
轉(zhuǎn)載于:https://www.cnblogs.com/HansBug/p/4472318.html
總結(jié)
以上是生活随笔為你收集整理的1477: 青蛙的约会的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 函数运用_月隐学python第10课
- 下一篇: 函数进阶_月隐学python第11课