社区讨论

30pts求调

P14361[CSP-S 2025] 社团招新参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhiyjyh7
此快照首次捕获于
2025/11/03 17:48
4 个月前
此快照最后确认于
2025/11/03 17:48
4 个月前
查看原帖
赛时5个全过了啊
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
struct st{
	int a,b,c;
}str[100005];
bool cmp1(st u,st v){
	if(max(u.a,u.b)<max(v.a,v.b))return 1;
	else if(max(u.a,u.b)==max(v.a,v.b)&&min(u.a,u.b)<min(v.a,v.b))return 1;
	else return 0;
}
bool cmp2(st u,st v){
	return u.c>v.c;
}
int x,y,z,tmpi,sum,ans;
signed main(){
	int n,_;
	cin>>_;
	while(_--){
		sum=ans=0;
		cin>>n;
		for(int i=0;i<n;i++){
			cin>>x>>y>>z;
			str[i].a=x-z;
			str[i].b=y-z;
			str[i].c=y-x;
			sum+=z;
		}
		sort(str,str+n,cmp1);
		int i;
		for(i=0;i<n/2&&max(str[i].a,str[i].b)<=0;i++);
		sort(str+i,str+n,cmp2);
		int tmpi=i+n/2;
		for(i;i<tmpi;i++){
			if(str[i].c<0&&i>=n/2)break;
			ans+=str[i].b;
		}
		for(i;i<n;i++){
			ans+=str[i].a;
		}
		cout<<sum+ans<<endl;
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...