对着题解调的题,已经马上跟题解长得一模一样了,再改感觉都快成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;
}