蒟蒻求救!孩子想上岸!题解已学习
查看原帖
蒟蒻求救!孩子想上岸!题解已学习
384462
想要AC的蒟蒻txt楼主2021/7/17 20:22

对着题解调的题,已经马上跟题解长得一模一样了,再改感觉都快成ctrl+c+v了 还是不过!!!!

排序后贪心的合并

两组样例都过了

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[100005][3];

bool cmp(int u,int v){//降序 
	if(a[u][2]==a[v][2]){
		if(a[u][1]==a[v][1]){
		    return a[u][0]<a[v][0];	
		}
		return a[u][1]<a[v][1];
	}
	return a[u][2]<a[v][2];
}

int main(){
	int n;
	int ans=0;
	int book[2];//记录解 
    int b[100005];
    int c;
  
    //读入和单个长方体的长宽高排序 
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i][0]>>a[i][1]>>a[i][2];
		sort(a[i],a[i]+3);
		if(ans<a[i][0]){
			ans=a[i][0];
			book[0]=i;
		}
		b[i]=i;
	}
	//所有长方体排序 
	sort(b+1,b+n+1,cmp);
	
	//搜索合并维护最大值 
	for(int i=1;i<n;i++){
		if(a[b[i]][1]!=a[b[i+1]][1]||a[b[i]][2]!=a[b[i+1]][2]){
		    continue;
		}
		c=a[b[i]][0]+a[b[i+1]][0];
		if(c<a[b[i]][1]){
			c=a[b[i]][2];
		}
		if(ans<c){
			ans=c;
			book[0]=b[i];
			book[1]=b[i+1];
		}
	}
	
	if(book[1]){
		printf("2\n%d %d",book[1],book[0]);
	}else{
		printf("1\n%d",book[0]);
	}
	return 0;
}
2021/7/17 20:22
加载中...