zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    【Intellij Idea】设置JDK
    MarkDown换行
    Git 查看/修改用户名、邮箱
    JavaScript对象
    Javascript事件
    第十次会议
    第九次会议
    详细设计文档
    第八次会议
    第七次会议
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12422418.html
Copyright © 2011-2022 走看看