学校设立了N个值日大队长和M个值日小队长,大队长一周一换,小队长每天一换。甲是第P个大队长,乙是第Q个小队长。学期的第一天是周一,学期一共有1000天。每周六周日不上学。请问本学期的第几天甲和乙第一次同一天值日。
#include <bits/stdc++.h>
#define int long long
#define JS ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
inline int Ex_gcd(int a, int b, int x, int y) {
if (!b) {
x = 1, y = 0;
return a;
}
int res = Ex_gcd(b, a % b, y, x);
y -= a / b * x;
return res;
}
int cmin(int a, int b) {
return a > b ? a = b, 1 : 0;
}
int n, m, p, q, a, b, c, d, x, y, t, ans, val;
/*
input 5 10 1 6
output
*/
signed main() {
JS;
cin >> p >> n >> q >> m;
a = 5 * p, b = n, c = m - 5 * q, ans = -1;
d = Ex_gcd(a, b, x, y), a /= d, b /= d;
for (int i = 0; i < 5; i++) {
if ((c + i) % d) {
continue;
}
val = (((x * (c + i) / d) % b) + b) % b;
val = val * p * 5 + q * 5 - i;
if (ans != -1) {
cmin(ans, val);
} else {
ans = val;
}
}
ans = ans / 5 * 7 + ans % 5;
if (ans != -1 && ans <= 1000) {
return cout << ans, 0;
}
return cout << "Impossible", 0;
}
值域他没给我……