社区讨论

Subtask #4 为什么一直过不了(最后一个测试点),求助

P7835 「Wdoi-3」夜雀 dreaming参与者 2已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lo8xnd7e
此快照首次捕获于
2023/10/28 02:14
2 年前
此快照最后确认于
2023/10/28 02:14
2 年前
查看原帖
C
#include <iostream>
using namespace std;
long long x[1005], y[1005], t[1005];
long long gcd(long long a, long long b)
{
	if (b == 0) return a;
	return gcd(b, a % b);
}
int main()
{
	int n, k;
	long long ans = 21000000000;
	cin >> n >> k;
	for (int i = 1; i <= k; i++)
	{
		cin >> t[i] >> x[i] >> y[i];
	}
	for (int i = 1; i <= k; i++)
	{
		for (int j = i + 1; j <= k; j++)
		{
			long long g = gcd(t[i], t[j]);//算最大公约数
			long long f = g * (t[i] / g) * (t[j] / g);//计算最小公倍数
			long long a = t[j] / g, b = t[i] / g;
			if ((x[i] % n + (a-1) % n * y[i] % n) % n == (x[j] % n + (b-1) % n * y[j] % n) % n)//最小公倍数处是否相同
			{
				if (!(a % n * y[i] % n % n == b % n * y[j] % n % n))//判断变化量是否相同
				{
					ans = min(ans, f * 2 - 1);
				}
			}
			else
			{
				ans = min(ans, f - 1);
			}
			//cout << g << ' ' << f << endl;
		}
	}
	if (ans == 21000000000) cout << "Mystia will cook forever...";
	else cout << ans;
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...