CF1304C Air Conditioner

Posted leachim

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1304C Air Conditioner相关的知识,希望对你有一定的参考价值。

C. Air Conditioner

原题

Problem Restatement

Gildong的餐厅每单位时间最多上下调整(1)单位温度。

对于某些时刻,总共给出(n)个区间,问是否可以使得每一时刻的温度保持在这些区间里面。

((1≤??≤100))

Solution

有点像“接元宝”那一类的题。不过这题只需要判断是否可以,而不需要找到最多能保证多少个。那么问题就很简单了。

抛开限制区间思考,从初始温度(m)开始,经过(1)单位时间,其实就相当于可以存在的温度变成一个区间([m-1,m+1])。以此类推我们可以求出来,无“限制区间”情况下,任意时刻的可调节温度区间。

讨论限制区间时,首先,如果能保持温度在限制区间里面,那么同一时刻的多个区间必须有一个公共区间或者公共点。所以我们只需要对这个公共区间/点进行讨论即可。所以我们可以认定,同一时刻只有一个限制区间。

限制区间本身已经排好序,所以我们只需要按照时间顺序,合并同一时刻区间,然后按顺序判断是否任一时刻可调节温度区间限制区间是否有重叠区间即可,同时也合并区间。

Code

#include <bits/stdc++.h>
using namespace std;

int n,m,tl,tr;
int ti[105],l[105],r[105];

void solve(){
    scanf("%d %d", &n, &m);
    for(int i=1;i<=n;i++)
        scanf("%d %d %d", &ti[i], &l[i], &r[i]);
    tl=tr=m;
    ti[0]=0;
    for(int i=1,j=1;i<=n;i=j){
        tl-=ti[i]-ti[i-1], tr+=ti[i]-ti[i-1];
        tl=max(tl,l[i]), tr=min(tr,r[i]);
        for(j=i+1;j<=n && ti[j]==ti[j-1];j++){
            tl=max(tl,l[j]);
            tr=min(tr,r[j]);
        }
        if(tl>tr){
            printf("NO
");
            return;
        }
    }
    printf("YES
");
}

int main(){
    int T=1;
    scanf("%d", &T);
    while(T--){
        solve();
    }
    return 0;
}

以上是关于CF1304C Air Conditioner的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1304C. Air Conditioner

C. Air Conditioner(区间交集)

Codeforces Round #620 Div2C Air Conditioner

Network Link Conditioner 不能与 Reachability 一起使用?

???CF652C???Foe Pairs??????????????????

Adobe AIR 代码签名证书使用指南