搞了半天实在不明白错在哪,先说一下我的思路,Ti+Di为飞机可以坚持到何时,并以此的大小对此结构体进行排序(若此相同则以降落时间的大小排序,若降落时间再相等则先到先落),按照排序的顺序一个一个降落;
可以问一下这个思路完全就是错的吗,还是怎么说,是的话可以给个反例吗
#include<bits/stdc++.h>
using namespace std;
struct feiji{
int t,d,l,td;
};
int main() {
int T;
cin>>T;
int n;
for(int i=1;i<=T;i++){
cin>>n;
struct feiji f[n+1];
for(int j=1;j<=n;j++){
int a,b,c;
cin>>a>>b>>c;
f[j].t=a;f[j].d=b;f[j].l=c;
f[j].td=a+b;
}
for(int j=1;j<=n;j++){
int min=f[j].td;int k1=j;
for(int k=j+1;k<=n;k++){
if(f[k].td==min){
if(f[k].l<f[k1].l){
min=f[k].td,k1=k;continue;
}
if(f[k].l==f[k1].l){
if(f[k].t<f[k1].t){
min=f[k].td,k1=k;continue;
}
}
}
if(f[k].td<min){
min=f[k].td,k1=k;
}
}
struct feiji t1=f[k1];f[k1]=f[j];
f[j]=t1;
}
int time=0;int flag=0;
for(int j=1;j<=n;j++){
if(time<=f[j].td){
if(time<f[j].t)time=f[j].t;
time=time+f[j].l;
}
else
flag=1;
}
if(flag==1)cout<<"NO\n";
else cout<<"YES\n";
}
}