Solution -「P1516」青蛙的约会

cirnovsky /

§ 首先声明,这道题我并没有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;
}