Codeforces Round #620 Div2C Air Conditioner

题意:

有一家烤肉餐厅,每天会迎接很多顾客。

每个顾客,他们都有自己能接受的温度范围。如果他们进入餐厅时温度在他们的接受范围内,他们就会感到高兴。

餐厅的空调有三种状态:关闭,加热,冷却。加热时温度每分钟升高一度。冷却时温度每分钟下降一度。

现在给出所有会来的顾客的到达时间,所能接受的最低温度和最高温度,询问老板是否可以让所有顾客开心。

题解:

开一个结构体存储每个顾客的信息。

先对所有顾客排序,优先级按照时间升序、能接受的最低温度升序、能接受的最高温度升序。

然后遍历整个结构体数组,模拟调温度这个过程,每次存储温度所能调的范围,贪心思想。

#include<bits/stdc++.h>
using namespace std;
int N,M;
struct node {
    int t;
    int l;
    int r;
};
vector<node> vi;
bool cmp (node a,node b) {
    if (a.t!=b.t) return a.t<b.t;
    else if (a.l!=b.l) return a.l<b.l;
    else return a.r<b.r; 
}
void solve () {
    vi.clear();
    scanf("%d%d",&N,&M);
    int L=M;
    int R=M;
    for (int i=0;i<N;i++) {
        int t,l,r;
        scanf("%d%d%d",&t,&l,&r);
        vi.push_back({t,l,r});
    }
    sort(vi.begin(),vi.end(),cmp);
    for (int i=0;i<N;i++) {
        int t=vi[i].t;
        if (i) t-=vi[i-1].t;
        L=max(L-t,vi[i].l);
        R=min(R+t,vi[i].r);
        if (L>R) {
            printf("NO\n");
            return;        
        }
    }
    printf("YES\n");
}
int main () {
    int T;
    scanf("%d",&T);
    while (T--) solve();
    return 0;
}

 

posted @ 2020-03-05 20:18  zlc0405  阅读(98)  评论(0编辑  收藏  举报