每日做智推~
一看就是一道数学题。
再看是一道公约数的题目。
标签是中国孙子定理。
题解是扩展欧几里得
(笑)
一开始没看数据范围 只有50分
开一个longlong就可以了
#include<cstdio> #define ll long long using namespace std; ll x, y, m, n, l; ll ans, x1, y1; ll exgcd(ll a, ll b, ll &x1, ll &y1) { if (!b) { x1 = 1; y1 = 0; return a; } ans = exgcd(b, a%b, x1, y1); ll t = x1; x1 = y1; y1 = t - a / b * y1; return ans; } int main() { scanf("%lld%lld%lld%lld%lld", &x, &y, &m, &n, &l); ll b = n - m, a = x - y; if (b < 0) { b = -b; a = -a; } exgcd(b, l, x1, y1); if (a%ans != 0) puts("Impossible"); else printf("%lld", ((x1*(a / ans)) % (l / ans) + (l / ans)) % (l / ans)); return 0; }