社区讨论

15pts AC on#1#15#16求调

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mjfntllw
此快照首次捕获于
2025/12/21 19:44
3 个月前
此快照最后确认于
2025/12/24 15:35
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int t;
struct student{
	int a1,a2,a3;
}a[100005];
struct xx{
	int f,h,c;
}k1[100005],k2[100005],k3[100005];
bool cmp(xx x,xx y)
{
	return x.c>y.c;
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		int n,sum1=0,sum2=0,sum3=0,n1=0,n2=0,n3=0;
		memset(k1,0,sizeof(k1));
		memset(k2,0,sizeof(k2));
		memset(k3,0,sizeof(k3));
		memset(a,0,sizeof(a));
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
			scanf("%d%d%d",&a[i].a1,&a[i].a2,&a[i].a3);
			if(a[i].a1>a[i].a2)
			{
				if(a[i].a1>a[i].a3)
				{
					n1++;
					sum1+=a[i].a1;
					k1[n1].h=i;
					k1[n1].f=a[i].a1;
					k1[n1].c=max(a[i].a1-a[i].a2,a[i].a1-a[i].a3);
				}
				else
				{
					n3++;
					sum3+=a[i].a3;
					k3[n3].h=i;
					k3[n3].f=a[i].a1;
					k3[n3].c=max(a[i].a3-a[i].a2,a[i].a3-a[i].a1);
				}
			}
			else
			{
				if(a[i].a2>a[i].a3)
				{
					n2++;
					sum2+=a[i].a2;
					k2[n2].h=i;
					k2[n2].f=a[i].a2;
					k2[n2].c=max(a[i].a2-a[i].a1,a[i].a2-a[i].a3);
				}
				else
				{
					n3++;
					sum3+=a[i].a3;
					k3[n3].h=i;
					k3[n3].f=a[i].a3;
					k1[n3].c=max(a[i].a3-a[i].a2,a[i].a3-a[i].a1);
				}
			}
		}
		sort(k1+1,k1+1+n1,cmp);
		sort(k2+1,k2+1+n2,cmp);
		sort(k3+1,k3+1+n3,cmp);
		if(n1>0.5*n)
		{
			while(n1>0.5*n)
			{
				if(a[k1[n1].h].a2>a[k1[n1].h].a3)
				{
					n2++;
					sum2+=a[k1[n1].h].a2;
					k2[n2].h=k1[n1].h;
					k2[n2].f=a[k1[n1].h].a2;
				}
				else
				{
					n3++;
					sum3+=a[k1[n1].h].a3;
					k2[n3].h=k1[n1].h;
					k2[n3].f=a[k1[n1].h].a3;
				}
				sum1-=k1[n1].f;
				n1--;
			}
		}
		else if(n2>0.5*n)
		{
			while(n2>0.5*n)
			{
				if(a[k2[n2].h].a1>a[k2[n2].h].a3)
				{
					n1++;
					sum1+=a[k2[n2].h].a1;
					k1[n1].h=k2[n2].h;
					k1[n1].f=a[k2[n2].h].a1;
				}
				else
				{
					n3++;
					sum3+=a[k2[n2].h].a3;
					k3[n3].h=k2[n2].h;
					k3[n3].f=a[k2[n2].h].a3;
				}
				sum2-=k2[n2].f;
				n2--;
			}
		}
		else if(n3>0.5*n)
		{
			while(n3>0.5*n)
			{
				if(a[k3[n3].h].a2>a[k3[n3].h].a1)
				{
					n2++;
					sum2+=a[k3[n3].h].a2;
					k2[n2].h=k3[n3].h;
					k2[n2].f=a[k3[n3].h].a2;
				}
				else
				{
					n1++;
					sum1+=a[k3[n3].h].a1;
					k1[n3].h=k3[n3].h;
					k1[n3].f=a[k3[n3].h].a1;
				}
				sum3-=k3[n3].f;
				n3--;
			}
		}
		cout<<sum1+sum2+sum3<<endl;
	}
	return 0;
}

回复

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

正在加载回复...