Codeforces Round #620 Div2C Air Conditioner
Posted zhanglichen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 "); return; } } printf("YES "); } int main () { int T; scanf("%d",&T); while (T--) solve(); return 0; }
以上是关于Codeforces Round #620 Div2C Air Conditioner的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #620 (Div. 2)D dilworld定理
Codeforces Round #620 (Div. 2)F2
Codeforces补题2020.3.4 (Round620 Div2)
Codeforces Round #620 Div2C Air Conditioner
Codeforces Round #620 Div2F Animal Observation(前缀和+动态规划+线段树维护)