W
e
l
c
o
m
e
: )

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 的新格式化函数
}
posted @ 2024-08-25 20:58  Jimmy-LEEE  阅读(38)  评论(0)    收藏  举报