社区讨论

15tps求调

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

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@miqxhrvv
此快照首次捕获于
2025/12/04 12:21
3 个月前
此快照最后确认于
2025/12/06 11:55
3 个月前
查看原帖
ACon#1#15#16
CPP
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <stack>
#include <sstream>
#include <set>
#include <time.h>
#include <stdlib.h>
#include <unordered_map>
#include <string>
#include <list>
#include <utility>
#include <stdio.h>
#include <stdlib.h>
#include <climits>
using namespace std;
struct node{
	int a,b,c;
	int b1,b2,b3;
	int cha;

};
bool cmp(node a,node b){
	return a.a>b.a;
}
bool cmp2(node a,node b){
	return a.cha<b.cha;
}

int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		node a[n];
		for(int i=0;i<n;i++){
			int v1,v2,v3;
			cin>>v1>>v2>>v3;
			int mx = max(v1,max(v2,v3));
			if(v1==mx){
				a[i].b1=1;
				a[i].a=v1;
				int mx2 = max(v2,v3);
				if(v2==mx2){
					a[i].b2=2;
					a[i].b=v2;
					a[i].c=v3;
					a[i].b3=3;
				}else{
					a[i].b=v3;
					a[i].c=v2;
					a[i].b3=2;
					a[i].b2=3;
				}
				a[i].cha = mx - mx2;

			}
			if(v2==mx){
				a[i].b1=2;
				a[i].a=v2;
				int mx2 = max(v1,v3);
				if(v3==mx2){
					a[i].b2=3;
					a[i].b=v3;
					a[i].c=v1;
					a[i].b3=1;
				}else{
					a[i].b=v1;
					a[i].c=v3;
					a[i].b2=1;
					a[i].b3=3;
				}
				a[i].cha = mx - mx2;
			}
			if(v3==mx){
				a[i].b1=3;
				a[i].a=v3;
				int mx2 = max(v1,v2);
				if(v1==mx2){
					a[i].b2=2;
					a[i].b=v1;
					a[i].c=v3;
					a[i].b3=3;
				}else{
					a[i].b=v2;
					a[i].c=v1;
					a[i].b2=3;
					a[i].b3=2;

				}
				a[i].cha = mx - mx2;
			}
			
			
		}
		sort(a,a+n,cmp);
		int cnt1=0,cnt2=0,cnt3=0;
		int f1=0,f2=0;
		int sum = 0;
		for(int i=0;i<n;i++){
			sum += a[i].a;
            if(a[i].b1==1){
                cnt1++;
            }
            if(a[i].b1==2){
                cnt2++;
            }
            if(a[i].b1==3){
                cnt3++;
            }
		}
		sort(a,a+n,cmp2);
		if(cnt1>n/2){
			for(int i=0;i<n;i++){
				sum -= a[i].cha;
				cnt1--;
				if(cnt1 == n/2){
					break;
				}
			}
		}
		if(cnt2>n/2){
			for(int i=0;i<n;i++){
				sum -= a[i].cha;
				cnt2--;
				if(cnt2 == n/2){
					break;
				}
			}
		}
		if(cnt3>n/2){
			for(int i=0;i<n;i++){
				sum += a[i].cha;
				cnt3--;
				if(cnt3 == n/2){
					break;
				}
			}
		}
		if(cnt1<=n/2&&cnt2<=n/2&&cnt3<=n/2){
			cout<<sum<<endl;
		}else{
			cout<<"-1"<<endl;
		}
	}
	return 0;
} 

回复

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

正在加载回复...