题解:AT_abc434_c [ABC434C] Flapping Takahashi
小蒟蒻的第二篇题解。
题目传送门:AtCoder 洛谷
我们注意到任务是按照时间顺序给出的,所以依次考虑即可。
注意:判断该组数据答案为 No 之后,一定要把数据全部读入完,否则会影响下一组数据的读入!(本蒟蒻赛时调了
下面上代码,结合注释食用更佳。
#include<bits/stdc++.h>
using namespace std;
void solve(){
bool ok=1;//记录该组测试数据的答案
int n,h,prev=0;//上一个任务的时间
cin>>n>>h;
int l=h,r=h,t,a,b;//l,r记录高度的上下界,初始均为 h
for(int i=1;i<=n;i++){
cin>>t>>a>>b;
l-=t-prev;//更新下界
l=max(l,0);//防止下界爆负数
r+=t-prev;//更新上界
if(r<a || l>b) ok=0;//[l,r]与[a,b]无交集,任务不可能完成
l=max(l,a);
r=min(r,b);//取[l,r]与[a,b]的交集作为新的上下界
prev=t;//更新prev
}
if(ok) cout<<"Yes\n";
else cout<<"No\n";
}
int main(){
int t;//多测
cin>>t;
while(t--) solve();
return 0;
}
/*
Terabyte's code.
Remember_Me();
*/
最后附上提交记录。