P10223 [COCI 2023/2024 #3] Eurokod 题解

解法

模拟题意即可。


先按组长评出的顺序赋上得分。

然后将其他成员给出的评分进行排序,然后赋上相应的得分。

这一步可以使用 pair<int, int> 进行存储。

最后再按总得分为第一关键字,成员评分为第二关键字排序。

这里可以用自定义结构体存储。

按题意输出即可。

Code

#include<bits/stdc++.h>
using namespace std;
struct st
{
int u, v, id;
st(int U, int V, int ID): u(U), v(V), id(ID) {}
bool operator<(st b) const {return u==b.u?v>b.v:u>b.u;}
}; // 用于存储的结构体
vector<st> lis;
vector<pair<int, int> > vc;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) lis.emplace_back(0, 0, i);
for(int i=1, t;i<=n;i++) cin>>t, lis[t-1].u=n+1-i; // 赋上组长给的得分
for(int i=1, t;i<=n;i++) cin>>t, vc.emplace_back(t, i);
sort(vc.begin(), vc.end()); // 排序
int tot=1;
for(auto [v, id]:vc)
lis[id-1].u+=(lis[id-1].v=(tot++)); // 赋上成员给的得分
sort(lis.begin(), lis.end()); // 输出前的排序
tot=1;
for(auto [u, v, id]:lis)
cout<<format("{}. Kod{:0>2} ({})\n", tot++, id, u);
// c++20 的新格式化函数
}

本文作者:Jimmy-LEEE

本文链接:https://www.cnblogs.com/redacted-area/p/18379533

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Jimmy-LEEE  阅读(20)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起