description
jlh小时很喜欢玩弹珠,但是他的玩法有些特别。他在一条直线上放一些纸当陷阱,弹珠每次必须跳过一个陷阱(不能多也不能少),并且不掉到陷阱内,如果弹珠顺利跳过所有陷阱,就算成功了,否则就算失败。我们假设弹珠每次跳相同的距离,现在让你写一个程序帮jlh判断,到底有没有可能成功。
input
先输入一个T,表示有T组测试数据。每次输入一个n(n<=100),表示有n个陷阱,接下来n行,每行输入区间(l,r),表示陷阱(0<=l<=r<=50000)。
output
如果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;
}
}