社区讨论

65分错了

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mhphznie
此快照首次捕获于
2025/11/08 07:39
3 个月前
此快照最后确认于
2025/11/08 07:39
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int t,n,a[500005][5],s[5],ans,ma[500005];
struct ab{
	int w,x;
};
int main(){
	cin>>t;
	while(t--){
		vector<ab>v[5];
		ans=0,s[1]=0,s[2]=0,s[3]=0;
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			int ss=0;
			for(int j=1;j<=3;j++){
				scanf("%d",&a[i][j]);
				ss=max(ss,a[i][j]);
			} 
			ans+=ss;
			ma[i]=ss;
			if(ss==a[i][1]) s[1]++;
			else if(ss==a[i][2]) s[2]++;
			else if(ss==a[i][3]) s[3]++;
	 	}
	 	for(int i=1;i<=3;i++){
			for(int j=1;j<=n;j++){
				v[i].push_back({a[j][i],j});
			}
		}
		for(int i=1;i<=3;i++){
			if(s[i]>n/2){
				vector<int>h;
				for(auto j:v[i]){
					int b=a[j.x][1],c=a[j.x][2],d=a[j.x][3];
					if(ma[j.x
					]!=b&&i==1) continue;
					if(ma[j.x]!=c&&i==2) continue;
					if(ma[j.x]!=d&&i==3) continue;
					if(i==1) h.push_back(b-max(c,d));
					if(i==2) h.push_back(c-max(b,d));
					if(i==3) h.push_back(d-max(c,b));
				}
				sort(h.begin(),h.end());
				for(auto j:h){
					s[i]--;
					ans-=j;
					if(s[i]<=n/2) break;
				}
			}
		}
		printf("%d\n",ans);
	}
}

回复

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

正在加载回复...