1 条题解

  • 0
    @ 2026-10-22 19:32:16

    贪心做法

    #include <bits/stdc++.h>
    #define int long long//坏习惯 
    using namespace std;
    const int N=1e5+5;
    struct node{
    	int a,b,c,num;//结构体储存,num为编号 
    }a[N];
    bool cmp1(node ls,node rs){
    	return ls.b-ls.a>rs.b-rs.a;
    }
    bool cmp2(node ls,node rs){
    	return ls.c-ls.a>rs.c-rs.a;
    }//比较规则 
    signed main(){
    	int n;
    	cin>>n;
    	int cnt=0;//记录a[i].a之和 
    	for(int i=1;i<=n;i++){
    		cin>>a[i].a>>a[i].b>>a[i].c;
    		a[i].num=i;
    		cnt+=a[i].a;
    	}
    	sort(a+1,a+n+1,cmp1);
    	int pre1=a[1].num,val1=a[1].b-a[1].a;
    	int pre2=a[2].num,val2=a[2].b-a[2].a;
    //	for(int i=1;i<=n;i++)cout<<a[i].num<<" ";
    //	cout<<endl;
    	sort(a+1,a+n+1,cmp2);
    	int pos1=a[1].num,sum1=a[1].c-a[1].a;
    	int pos2=a[2].num,sum2=a[2].c-a[2].a;//一些便于书写的变量 
    //	for(int i=1;i<=n;i++)cout<<a[i].num<<" ";
    //	cout<<endl;
    	if(pos1==pre1&&sum1>val1){ 
    		cout<<cnt+sum1+val2<<"\n"<<pre2<<" "<<pos1;
    		return 0;
    	}
    	else if(pos1==pre1&&sum1<=val1){
    		cout<<cnt+sum2+val1<<"\n"<<pre1<<" "<<pos2;
    		return 0;
    	}
    	if(a[1].num!=pre1)cout<<cnt+val1+sum1<<"\n"<<pre1<<" "<<pos1;
    //	cout<<endl<<val1<<" "<<sum1<<" "<<cnt; 
    	return 0;
    }
    
    
    • 1

    信息

    ID
    1142
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    7
    已通过
    5
    上传者