问一下我这个思路错在哪里
查看原帖
问一下我这个思路错在哪里
1015378
a18863696128楼主2023/9/18 22:04

搞了半天实在不明白错在哪,先说一下我的思路,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";
	}
}
2023/9/18 22:04
加载中...