求调站外题(约蓝/绿难度)
  • 板块学术版
  • 楼主__er
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/12/25 09:47
  • 上次更新2023/10/24 06:42:19
查看原帖
求调站外题(约蓝/绿难度)
713955
__er楼主2022/12/25 09:47

学校设立了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;
}

值域他没给我……

2022/12/25 09:47
加载中...