专栏文章
题解:P14361 [CSP-S 2025] 社团招新 / club(民间数据)
P14361题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minfi601
- 此快照首次捕获于
- 2025/12/02 01:34 3 个月前
- 此快照最后确认于
- 2025/12/02 01:34 3 个月前
考场30min才写出来。
这里说一个很唐诗大模拟的思路,先输入 表示第 个人分别对 部门的满意度,再对 进行从大到小排序,用 表示排序后 在排序前的位置,并算排序后 和 作为对这 个人排序的关键字。
CPP这里说一个
struct node{
ll x[3],p[3],op,c;
}a[N];
inline bool cmp(node& x,node& y){
return x.op>y.op||(x.op==y.op&&x.c>y.c);
}
inline bool cmp2(ll& x,ll& y){
return x>y;
}
CPPfor(int ii=1;ii<=n;ii++){ //不要问我为什么是ii
for(int i=0;i<=2;i++) cin>>a[ii].x[i],nx[i]=x[i];
sort(a[ii].x,a[ii].x+3,cmp2); //对x排序
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
if(nx[j]==a[ii].x[i]) a[ii].p[i]=j; //排序后在排序前序列的位置
a[ii].op=a[ii].x[0]-a[ii].x[1];
a[ii].c=a[ii].x[1]-a[ii].x[2]; //做差
}
sort(a+1,a+n+1,cmp); //对每个人排序
然后从 到 对每个人进行具体的选择
CPPfor(int i=1;i<=n;i++){
if(chosen[a[i].p[0]]<n/2){ //满意度最大的部门
chosen[a[i].p[0]]++;
ans+=a[i].x[0];
}
else if(chosen[a[i].p[1]]<n/2){ //第二的
chosen[a[i].p[1]]++;
ans+=a[i].x[1];
}
else{ //最差的
chosen[a[i].p[2]]++;
ans+=a[i].x[2];
}
}cout<<ans<<endl;
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...