社区讨论
求助
P14361[CSP-S 2025] 社团招新参与者 4已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mhixoe4w
- 此快照首次捕获于
- 2025/11/03 17:24 4 个月前
- 此快照最后确认于
- 2025/11/08 07:50 4 个月前
rt,考场代码民间数据只拿到了 80 pts,找不到问题在哪,求调
CPP#include <bits/stdc++.h>
#define int long long
#define ret return
#define mp make_pair
#define pb push_back
#define mid (l+r>>1)
using namespace std;
int read(){
int s=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
ret s*f;
}
const int N=1e5+10;
int cnt[4],id[4],a[N][4];
bool cmp(int x,int y){ret cnt[x]>cnt[y];}
void solve(){
int n=read(),ans=0,tot=0;
cnt[1]=cnt[2]=cnt[3]=0;
for(int i=1;i<=n;i++){
a[i][1]=read();a[i][2]=read();a[i][3]=read();
for(int j=1;j<=3;j++)if(a[i][j]>=max(a[i][1],max(a[i][2],a[i][3]))){cnt[j]++;break;}
ans+=max(a[i][1],max(a[i][2],a[i][3]));
}
id[1]=1,id[2]=2,id[3]=3;sort(id+1,id+4,cmp);
if(cnt[id[1]]<=n/2){printf("%lld\n",ans);ret;}
priority_queue<int> q;
for(int i=1;i<=n;i++){
for(int j=1;j<=3;j++){
if(a[i][j]<max(a[i][1],max(a[i][2],a[i][3])))continue;
if(j!=id[1])continue;q.push(max(a[i][id[2]],a[i][id[3]])-a[i][id[1]]);
}
}
for(int i=1;i<=cnt[id[1]]-n/2;i++)ans+=q.top(),q.pop();
while(!q.empty())q.pop();
printf("%lld\n",ans);
}
signed main(){int t=read();while(t--)solve();ret 0;}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...