description:
-
一个餐馆中有个空调,每分钟可以选择上调 1 1 1 个单位的温度或下调 1 1 1 个单位的温度,当然你也可以选择不变,初始的温度为 m m m 。
-
有 n n n 个食客,每个食客会在 t i t_i ti 时间点到达,他所能适应的最低温度是 l i l_i li ,最高温度是 h i h_i hi ,他只会在 t i t_i ti 时刻逗留。
-
如果温度不在食客的适应范围内,他就会不舒服,请你判断,空调能否使得 n n n 位来就餐的食客都感到舒服。
-
本题多组数据,数据组数不大于 500 500 500。
-
1 ≤ n ≤ 100 1\le n\le 100 1≤n≤100, − 1 0 9 ≤ m , l i , h i ≤ 1 0 9 -10^9\le m,l_i,h_i\le 10^9 −109≤m,li,hi≤109, 1 ≤ t i ≤ 1 0 9 1\le t_i\le 10^9 1≤ti≤109。
-
translate by @ShineEternal。
solution:
设刚开始的区间为 [ t m p l , t m p r ] [tmpl,tmpr] [tmpl,tmpr]。
其中 t m p l = t m p r = m tmpl=tmpr=m tmpl=tmpr=m。
那么每次我们能调节到的温度区间为 [ t m p l − Δ t , t m p r + Δ t ] [tmpl-\Delta t,tmpr+\Delta t] [tmpl−Δt,tmpr+Δt]。
其中 Δ t = t i − t i − 1 \Delta t=t_i-t_{i-1} Δt=ti−ti−1。
这是因为我们再规定时间内能将温度调节到这个区间内的任意一点。
然而具体怎样调我们并不关心。
然后这一次我们判断 [ t m p l − Δ t , t m p r + Δ t ] [tmpl-\Delta t,tmpr+\Delta t] [tmpl−Δt,tmpr+Δt] 与 [ l i , h i ] [l_i,h_i] [li,hi] 有无交集即可。
如果不在区间里直接一次就 no
了,在区间里因为我们必须要等到那个时间点游客打完酱油再调温度,所以要将温度卡到对应的舒适区间。(这里第二组样例是一个很好的解释。)
code:
#include<cstdio>
#include<algorithm>
using namespace std;
long long t[105],l[105],h[105];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
long long m;
long long tmpT=0;
scanf("%d%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&t[i],&l[i],&h[i]);
}
long long L=m,r=m;
int flag=0;
for(int i=1;i<=n;i++)
{
L=L-(t[i]-t[i-1]);
r=r+(t[i]-t[i-1]);
if(L>h[i]||r<l[i])
{
printf("NO\n");
flag=1;
break;
}
else
{
L=max(L,l[i]);
r=min(r,h[i]);
}
}
if(flag==0)
{
printf("YES\n");
}
}
return 0;
}