Codeforcesラウンド#620(ディビジョン2。):エアコン

Discription
吉洞はプルコギのレストランを所有しています。それらの多くはそれを訪問する前に予約をしたいので、レストランでは、多くの顧客を持っています。

吉洞は彼がすべての顧客の好ましい温度範囲を記憶していること、顧客を満足させるために一生懸命しよう!予約リストを見ると、彼はレストランの温度を制御することにより、すべての顧客を満足させるために望んでいます。

加熱、冷却、オフ:レストランは3つの状態を有する空気調和機を有しています。それはオフだ場合は、レストランの温度は同じまま。それは、1分間に1による温度上昇を加熱だとき。それは冷却だとき最後に、温度が1分間に1ずつ減少します。彼が望んでいるよう吉洞は任意の整数分の時点で、何回も状態を変更することができます。エアコンは、最初はオフになっています。

- 時間(分)i番目の顧客訪問レストラン、リチウム - 低級その好ましい温度範囲の上限、およびHI - 上部その好ましい温度範囲の下限TI:各顧客は、三つの値によって特徴付けられます。

温度は、彼らがレストランを訪れた瞬間に好ましい範囲内であれば、顧客が満足しています。正式には、i番目の顧客が満足している場合、温度がTI番目分中のLiとHI(包括的)の間にある場合にのみ。

初期温度、予約されたお客さまの訪問回数とその好ましい温度範囲のリストを考えると、あなたはそれがすべての顧客を満足させることが可能かどう彼を見つけるつもりです。

入力は、
各テストは、1つ以上のテストケースが含まれています。最初の行は、テストケースQ(1≤q≤500)の数を含んでいます。テストケースの説明は次の通りです。

各テストケースの最初の行は、n予約顧客とMの数は、レストランの初期温度である2つの整数nとm(1≤n≤100、-109≤m≤109)を含みます。

次に、n行が続きます。それらのi番目の行は、TIは、Liが低いi番目の顧客訪問、時間である三つの整数TI、リチウム、およびHI(1≤ti≤109、-109≤li≤hi≤109)を含み、その好ましい温度範囲の上限、およびHI上部その好ましい温度範囲で結合されています。好ましい温度範囲は含まれています。

顧客は彼らの訪問時間の非減少順に与えられ、現在の時刻が0であるされています。

出力
、すべての顧客を満足させることが可能である場合には、各テストケースの場合は、「YES」を印刷します。それ以外の場合は、「NO」を印刷します。

あなたはどのような場合(上部または下部)の各文字を印刷することができます。

例の
入力

4
3 0
5 1 2
7 3 5
10 -1 0
2 12
5 7 10
10 16 20
3 -100
100 0 0
100 -50 50
200 100 100
1 100
99 -100 0

出力

YES
NO
YES
NO


最初のケースで、吉洞は次のようにすべての顧客を満足させるためにエアコンを制御することができます。

第0分で、加熱状態(温度は0)に変更。
2-ND分で、(温度が2である)、オフの状態を変更します。
5回目分で、加熱状態を変化(温度が2であり、1番目の顧客が満足されます)。
6回目分で、(温度が3である)がオフの状態を変更します。
7回目分で、冷却に状態を変化(温度が3である、2番目の顧客が満足されます)。
10番目の分で、温度は0、を満たす最後の顧客になります。
第3のケースで、吉洞は0番目分で加熱状態を変更し、それが残すことができます。そして、すべての顧客を満足させることでしょう。1-STの顧客の訪問時間は2-ND顧客の訪問時間に等しいことに注意してください。

第二及び第四のケースでは、吉洞は、少なくとも一人の顧客を不満にするために有しています。

質問の意味
トンを入力し、tはサンプルのセットを表明しました。
N個の入力サンプル及びMの各セット。nがmは初期温度であり、数を表します。
次のn行、列、T、L、時間ごとに3つの入力。
TIは、エントリの時間を示し、Liは第i番目の位置の最低温度であり、HI最高温度を表します。
既知のはわずか1分あたり度を増加または減少しました。

考え
実際のオーバーラップ所望の温度範囲を見るために特定の時間に応じて温度範囲内の各温度を算出する時間差を、ないではない場合、最低温度範囲次いで狭い温度範囲。

ACコード

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define sd(n) scanf("%d", &n)
#define sdd(n, m) scanf("%d%d", &n, &m)
#define sddd(n, m, k) scanf("%d%d%d", &n, &m, &k)
#define sld(n) scanf("%lld", &n)
#define sldd(n, m) scanf("%lld%lld", &n, &m)
#define slddd(n, m, k) scanf("%lld%lld%lld", &n, &m, &k)
#define sf(n) scanf("%lf", &n)
#define sff(n, m) scanf("%lf%lf", &n, &m)
#define sfff(n, m, k) scanf("%lf%lf%lf", &n, &m, &k)
#define pd(n) printf("%d\n", (n))
#define pdd(n, m) printf("%d %d\n", n, m)
#define pld(n) printf("%lld\n", n)
#define pldd(n, m) printf("%lld %lld\n", n, m)
#define rep(i, a, n) for(int i=a; i<=n; i++)
#define per(i, n, a) for(int i=n; i>=a; i--)
 
int T;
int f;
int n;
ll m;
ll t[110],l[110],h[110];
 
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        f=0;
        sd(n);
        sld(m);
        ll low=m,high=m;
        for(int i=1;i<=n;i++)
            slddd(t[i],l[i],h[i]);
        t[0]=0;
        for(int i=1;i<=n;i++)
        {
            low-=(t[i]-t[i-1]);
            high+=(t[i]-t[i-1]);
            if(low<l[i])
                low=l[i];
            if(high>h[i])
                high=h[i];
            if(high-low<0)
            {
                f=1;
                break;
            }
        }
        if(f)
            cout<<"NO"<<endl;
        else
            cout<<"YES"<<endl;
    }
    return 0;
}
公開された313元の記事 ウォンの賞賛105 ・は 10000 +を見て

おすすめ

転載: blog.csdn.net/weixin_43460224/article/details/104349269