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 的新格式化函数
}

浙公网安备 33010602011771号