POJ1061:青蛙的约会——题解
生活随笔
收集整理的這篇文章主要介紹了
POJ1061:青蛙的约会——题解
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://poj.org/problem?id=1061
Description
兩只青蛙在網(wǎng)上相識(shí)了,它們聊得很開(kāi)心,于是覺(jué)得很有必要見(jiàn)一面。它們很高興地發(fā)現(xiàn)它們住在同一條緯度線上,于是它們約定各自朝西跳,直到碰面為止。可是它們出發(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米。現(xiàn)在要你求出它們跳了幾次以后才會(huì)碰面。
Input
輸入只包括一行5個(gè)整數(shù)s,t,p,q,L,其中s≠t < 2000000000,0 < p、q < 2000000000,0 < L < 2100000000。 (變量名和原題不同請(qǐng)注意)Output
輸出碰面所需要的跳躍次數(shù),如果永遠(yuǎn)不可能碰面則輸出一行"Impossible"Sample Input
1 2 3 4 5Sample Output
4設(shè)x為最終結(jié)果,則我們能列出式子:
(p - q)x = t - s (mod L)
顯然該式可以轉(zhuǎn)化為:
(p - q)x + Ly = t - s
再變換一下變成:
ax + by = c
變成了熟悉的exgcd問(wèn)題,正常求解即可。
#include<cstdio> #include<cctype> #include<iostream> using namespace std; typedef long long ll; ll gcd(ll a,ll b) {return b?gcd(b,a%b):a; } void exgcd(ll a,ll b,ll &x,ll &y){if(b==0){x=1;y=0;return;}exgcd(b,a%b,x,y);ll temp;temp=x;x=y;y=temp-(a/b)*y;return; } int main(){ll s,t,p,q,l;cin>>s>>t>>p>>q>>l;ll a=(p-q+l)%l,b=l,c=(t-s+l)%l,g=gcd(a,b);if(c%g){puts("Impossible");return 0;}a/=g;b/=g;c/=g;ll x,y;exgcd(a,b,x,y);x=(x%b+b)%b;x=x*c%b;cout<<x;return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/luyouqi233/p/7898974.html
總結(jié)
以上是生活随笔為你收集整理的POJ1061:青蛙的约会——题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: webpack 3 零基础入门教程 #1
- 下一篇: VDI序曲二 RemotoAPP部署