2025-12-11 18:29:50
发布于:广东
#include<bits/stdc++.h>
using namespace std;
struct Member{
int a,b,c;
int best,best2;
int cz;
};
int main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int cntm=n/2;
vector<Member> members(n);
vector<int> ans(4,0);
int total=0;
for(int i=0;i<n;i++){
int a,b,c;
cin>>a>>b>>c;
members[i].a=a;
members[i].b=b;
members[i].c=c;
int val=max({a,b,c});
total+=val;
int jbest=0,jbest2=0;
if(a==val){
jbest=1;
jbest2=(b>c)?2:3;
}else if(b==val) {
jbest=2;
jbest2=(a>c)?1:3;
}else{
jbest=3;
jbest2=(a>b)?1:2;
}
members[i].best=jbest;
members[i].best2=jbest2;
int vala=(jbest==1)?a:(jbest==2)?b:c;
int vala2=(jbest2==1)?a:(jbest2==2)?b:c;
members[i].cz=vala-vala2;
ans[jbest]++;
}
for(int st=1;st<=3;st++){
if(ans[st]<=cntm)continue;
int cz=ans[st]-cntm;
vector<int> dp;
for(int i=0;i<n;i++) {
if(members[i].best==st) {
dp.push_back(i);
}
}
sort(dp.begin(),dp.end(),[&](int x,int y) {
return members[x].cz<members[y].cz;
});
for(int k=0;k<cz;k++){
total-=members[dp[k]].cz;
ans[st]--;
ans[members[dp[k]].best2]++;
}
}
cout<<total<<'\n';
}
return 0;
}


先贪心再sort排序即可解
虽说我做了1小时
这里空空如也










有帮助,赞一个