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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

J - 青蛙的约会(扩展欧几里得)

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 J - 青蛙的约会(扩展欧几里得) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://vjudge.net/contest/218366#problem/J

第一步追及公式要寫對:y+nk-(x+mk)=pL => (n-m)k+lp=x-y

可以看出擴展歐幾里得原型,這里注意擴展歐幾里得求出的是任意解,非最優,要推出最小解k。

(n-m)x+ly=gcd => (n-m)(x*(x-y)/gcd) + l*y*(x-y)/gcd = x-y

則k =?x*(x-y)/gcd(某一解非最小),由于k每次可轉移t = l/gcd

最小解為(k%t+t)%t。

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cstdlib> 6 #include<cmath> 7 #include<vector> 8 #include<stack> 9 #include<queue> 10 #define lson l, m, rt<<1 11 #define rson m+1, r, rt<<1|1 12 #define IO ios::sync_with_stdio(false);cin.tie(0); 13 #define INF 0x3f3f3f3f 14 #define MAXN 500010 15 const int MOD=1e9+7; 16 typedef long long ll; 17 using namespace std; 18 ll ext_gcd(ll a, ll b, ll &x, ll &y) 19 { 20 if(b == 0){ 21 x = 1; 22 y = 0; 23 return a; 24 } 25 ll r = ext_gcd(b, a%b, x, y); 26 ll t = x; 27 x = y; 28 y = t-(a/b)*y; 29 return r; 30 } 31 int main() 32 { 33 ll n, m, x, y, l, k, p; 34 cin >> x >> y >> m >> n >> l; 35 ll r = ext_gcd(n-m, l, k, p);//k和p為任意解,非最優 36 if((x-y)%r!=0){ 37 cout << "Impossible" << endl; 38 } 39 else{ 40 ll t = l/r;//k每次轉移量 41 ll ans = k*(x-y)/r;//從擴展歐幾里得標準公式轉到我們所列公式求得的k值 42 cout << (ans%t+t)%t << endl; 43 } 44 return 0; 45 }

?

轉載于:https://www.cnblogs.com/Surprisezang/p/8733200.html

總結

以上是生活随笔為你收集整理的J - 青蛙的约会(扩展欧几里得)的全部內容,希望文章能夠幫你解決所遇到的問題。

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