日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P1516 青蛙的约会

發布時間:2025/7/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1516 青蛙的约会 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

根據題意可以列出方程:

設走了X步,已經繞了維度線Y圈

那么? ?nX-mX=LY+(x-y)

稍微轉換一下: (n-m)X - LY = x-y

如果設? A=n-m,B=-L,C=x-y

那就變成了AX+BY=C的形式

直接套exgcd就可以得到一組AX+BY=gcd(A,B)的解

根據基本的數學知識,原方程有解當且僅當? gcd(A,B) | C? 時

然后把X和Y乘一個C/gcd(A,B)就是原方程的一組解(X,Y)了

然后要注意n-m為負的情況,要把方程兩邊同時乘-1(A=-A,C=-C)

Y的符號不重要,所以B乘不乘-1都沒關系

然后考慮得到一組解后如何求出最小解

可以發現兩只青蛙每走L/gcd(L,A)步后就都會回到出發點

所以只要把答案對L/gcd(L,A)取模就是最小解了

還要注意答案是負數的情況,這時答案為 (X%mo+mo)%mo

#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> using namespace std; typedef long long ll; ll exgcd(ll a,ll b,ll &x,ll &y) {if(!b) { x=1,y=0; return a; }ll g=exgcd(b,a%b,x,y);ll t=x; x=y;y=t-a/b*y;return g; } ll n,m,x,y,L; ll d,X,Y; int main() {cin>>x>>y>>m>>n>>L;ll A=n-m,B=x-y;//這里的B就是上面說的Cif(A<0) A=-A,B=-B;d=exgcd(A,L,X,Y);if(B%d) { printf("Impossible"); return 0; }ll ans=X*B/d,mo=L/d;printf("%lld",(ans%mo+mo)%mo);return 0; }

?

轉載于:https://www.cnblogs.com/LLTYYC/p/9778812.html

總結

以上是生活随笔為你收集整理的P1516 青蛙的约会的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。