题解:P14257 嫉妒(jealousy)
TJ P14257
前言
一道看似困难实则简单的题目。不需要数学,仅需 for 循环轻松拿下。
Analysis
题目中仅给出了 Tag 变量范围:
发现其实可以暴力枚举。
具体如何枚举呢?
首先,枚举一个时刻
具体地,他会在第
y + j × t 分钟在面试间门口。第
i 场面试的时间为从第(i − 1) × s 分钟到第i× s 分钟。
可知,应为
判断是否正好撞上小 Y 时,可以判断上一场面试开始与结束的时间是否与小 Y 在面试间门口时间相等。
因此,就很好写出代码了:
Code
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, y, s, t; // n: 面试的场数; y: 来的时刻; s: 面试持续的时间; t: 巡逻一圈的时间
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> y >> s >> t;
for (int i = 1; i <= n; i++) { // i: 面试的场数
int sk1 = (i - 1) * s;
int sk2 = i * s; // 两个时刻
bool flag = true; // 是否有一个符合题意的时刻
for (int j = 0; j * t + y <= n * s; j++) {
if (j * t + y == sk2 || j * t + y == sk1) {
flag = false;
break;
}
}
if (flag) {
cout << "Yes";
goto end; // 不想写 return 0
}
}
cout << "No";
end:
return 0;
}