jlh小时很喜欢玩弹珠,但是他的玩法有些特别。他在一条直线上放一些纸当陷阱,弹珠每次必须跳过一个陷阱(不能多也不能少),并且不掉到陷阱内,如果弹珠顺利跳过所有陷阱,就算成功了,否则就算失败。我们假设弹珠每次跳相同的距离,现在让你写一个程序帮jlh判断,到底有没有可能成功。
先输入一个T,表示有T组测试数据。每次输入一个n(n<=100),表示有n个陷阱,接下来n行,每行输入区间(l,r),表示陷阱(0<=l<=r<=50000)。
如果jlh有可能成功,输出YES,否则输出NO。
#include "iostream" #include "vector" #include "algorithm" using namespace std; int main() { int t, n; int min = 0; cin >> t; //遍历案例 for (int i = 0; i < t; ++i) { cin >> n; //装填陷阱 vector<vector<int>> trap(n); for (int j = 0; j < n; ++j) { int l, r; cin >> l >> r; if (r >= l) { trap[j].push_back(l); trap[j].push_back(r); min = max(min, l - n); } else { return 0; } } //装填最小步长 vector<int> stepMin; for (int j = 0; j < n; ++j) { stepMin.push_back(trap[j][1] - trap[j][0]); } sort(stepMin.begin(), stepMin.end()); int min = stepMin[n - 1]; int flag = 1; for (int j = 0; j < n - 1; ++j) { if (trap[j][0] + min > trap[j + 1][0]) flag = 0; break; } if (flag == 1) cout << "YES" << endl; if (flag == 0) cout << "NO" << endl; } }