div2 620 C

C

Tag

双指针,贪心


定义一个温度区间,\([mn,mx]\),使得这个范围在\(t\)分钟的变化与下一个温度区间产生交集

然后不断的迭代这个区间,如果中途不能与下一个区间产生交集,或者最后区间不存在就输出No

因为客人到达的时间为增序,所以不需要排序

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int t[N],l[N],h[N];
int main() {
    int q,n,m;
    cin >> q;
    while(q --) {
        bool flag = 0;
        cin >> n >> m;
        for(int i = 0;i < n; ++i) {
            cin >> t[i] >> l[i] >> h[i];
        }
        int prev = 0,mn = m,mx = m;//mn == min,mx == max
        for(int i = 0;i < n; ++i) {
            mn -= t[i] - prev;
            mx += t[i] - prev;
            if(mn > h[i] || mx < l[i]) {
                flag = 1;
                break;
            }
            mn = max(mn,l[i]);
            mx = min(mx,h[i]);
            prev = t[i];
        }
        if(flag) cout << "No\n";
        else cout << "Yes\n";
    }
    return 0;
}
posted @ 2020-02-22 14:46  南风--  阅读(79)  评论(0编辑  收藏  举报