青蛙的旅行 poj 1061

// 参考->青蛙的约会 exgcd解同余方程

定理证明->点我

 1 /*
 2  * @Promlem:
 3  * @Time Limit: ms
 4  * @Memory Limit: k
 5  * @Author: pupil-XJ
 6  * @Date: 2019-10-20 17:19:56
 7  * @LastEditTime: 2019-10-20 18:52:09
 8  */
 9 #include<cstdio>
10 #include<cstring>
11 #include<cmath>
12 #include<iostream>
13 #include<string>
14 #include<algorithm>
15 #include<vector>
16 #include<queue>
17 #include<stack>
18 #include<set>
19 #include<map>
20 #define rep(i, n) for(int i=0;i!=n;++i)
21 #define per(i, n) for(int i=n-1;i>=0;--i)
22 #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
23 #define rep1(i, n) for(int i=1;i<=n;++i)
24 #define per1(i, n) for(int i=n;i>=1;--i)
25 #define Rep1(i, sta, n) for(int i=sta;i<=n;++i)
26 #define L k<<1
27 #define R k<<1|1
28 #define mid (tree[k].l+tree[k].r)>>1
29 using namespace std;
30 const int INF = 0x3f3f3f3f;
31 typedef long long ll;
32
33 inline ll gcd(ll x, ll y) { return (!y) ? x : gcd(y, x%y); }
34
35 inline ll exgcd(ll a, ll b, ll &x, ll &y) {
36     if(!b) {
37         x = 1;
38         y = 0;
39         return a;
40     }
41     ll ans = exgcd(b, a%b, x, y);
42     ll temp = x;
43     x = y;
44     y = temp - a/b*y;
45     return ans;
46 }
47
48 int main() {
49     ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
50     ll x, y, m, n, l;
51     cin >> x >> y >> m >> n >> l;
52     ll a = l, b = n-m, c = x-y, d = gcd(a, b);
53     if(c % d != 0) cout << "Impossible\n";
54     else {
55         exgcd(a, b, x, y);
56         cout << ((y*c/d)%(l/d)+(l/d))%(l/d) << "\n";
57     }
58     return 0;
59 }

原文地址:https://www.cnblogs.com/pupil-xj/p/11708573.html

时间: 2024-08-29 22:57:49

青蛙的旅行 poj 1061的相关文章

AC日记——青蛙的约会 poj 1061

青蛙的约会 POJ - 1061 思路: 扩展欧几里得: 设青蛙们要跳k步,我们可以得出式子 m*k+a≡n*k+b(mod l) 式子变形得到 m*k+a-n*k-b=t*l (m-n)*k-t*l=b-a 然后,exgcd函数求出k 然后输出刚刚大于0的k即可 来,上代码: #include <cmath> #include <cstdio> #include <cstring> #include <iostream> using namespace s

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

分析:这个东西在数论里面应该叫做不定方程式,可以搜一下,有很精彩的证明,先求出来方程式的一组特解,然后用这组特解来求通解,但是求出来特解之后怎么求这些解里面的最小非负x值?我们知道 x = x0 + bt, 假设x=0, 也就是最小值, 那么 t = x0/(-b), x0+x0/(-b)*b就是最小值了,当然如果结果是负的加上一个b即可. 代码如下: ========================================================================

青蛙的约会 POJ - 1061 (exgcd)

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们把这两只青蛙分别叫做青蛙A和

POJ - 1061 青蛙的约会 (扩展欧几里得算法)

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们把这

poj 1061 青蛙的约会 (扩展欧几里得模板)

青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1061 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很

poj 1061 青蛙的约会(拓展欧几里德)

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们把这

POJ 1061 青蛙的约会 (扩展欧几里得)

原式 ax + by = c    =>  ax1 + by1 = gcd(a,b); a,b,c为任意整数,d = gcd(a,b),则  ax1 + by1 = d 的一组解是(x1,y1),c是gcd(a,b)的倍数时,其中的一组解为(x1*c/d,y1*c/d);c不是gcd(a,b)的倍数时,无解 青蛙的约会,就是一道例题 按照题意很容易列举出等式:(x+ms) - (y+ns) = k*l;  (k=1.....n)   变形到  扩展欧几里得公式  即可: #include <i

POJ 1061青蛙的约会(扩展欧几里德)

对欧几里德不太熟悉,参考了网上的一些讲解又学习了一下 利用扩展欧几里德算法求线性方程的一般过程:a*x + b*y = m 令a1 = a/gcd(a,b) b1 = b/gcd(a,b) m1 = m/gcd(a,b) a*x + b*y = m两边同除以m1a*x/m1 + b*y/m1 = m/m1 = gcd(a,b)设x1 = x/m1 ,y1 = y/m1 则原式变为a*x1 + b*y1 = gcd(a,b)若求出这个方程中的x1,y1,那么x = x1*m1, y = y1*m1

ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德

POJ 1061 青蛙的约会 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰