§ 首先声明,这道题我并没有AC
这是一道Ex_gcd
的模版题
但我这个数学已经差的一定地步的人来说,不可能用ex_gcd
来做。
··············································································
§ 其实这道题可以换一个思路来做。
如果不用exgcd
的话,模拟也是一个不错的选择
但两只青蛙的情况不好模拟,而且时间复杂度肯定会到达一个十分恐怖的地步
那么我们就来思考一下如何将两只青蛙变为一只青蛙(同桌:连体婴儿)
不难想到把青蛙的速度定为x - y
,起点定为m - n
,这样就可以愉快的模拟啦(其实蒟蒻的我还是想了半天)
但这样只有50分,我也算不来时间复杂度
如果同学能算出时间复杂度或者知道如何优化我的代码评论区请
下面是50分代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int x, y;
int m, n, l;
int sp, st, mod_, div_;
signed main()
{
scanf("%d%d%d%d%d", &x, &y, &m, &n, &l);
if (!(m ^ n)) return puts("Impossible") & 0;
if (m > n) sp = m - n, st = (y - x + l) % l;
else sp = n - m, st = (x - y + l) % l;
mod_ = st % sp;
div_ = st / sp;
int cxk = 0x9C74FC;
for (; ; cxk &= 0x76FC44, cxk ^= ((0xFD962C | 0x19AC5F) & 0x79C74A))
{
if (!(st % sp)) return printf("%d\n", div_) & 0;
register int meta = (st % sp) + l;
div_ += meta / sp;
st = meta % sp;
if (!(st ^ mod_)) return puts("Impossible") & 0;
}
return 0;
}