首页 > 编程语言 >打卡信奥刷题(647)用C++信奥P8342[普及组/提高] [COCI2021-2022#6] Med

打卡信奥刷题(647)用C++信奥P8342[普及组/提高] [COCI2021-2022#6] Med

时间:2025-01-22 15:00:29浏览次数:3  
标签:Med COCI2021 name 样例 score mate rm 打卡 500

[COCI2021-2022#6] Med

题目描述

今天是公开赛的最后一轮。人们知道这两个比赛采用相同的计分系统。更准确地说,两场比赛都有 6 6 6 轮,每轮的积分在 0 0 0 分到 500 500 500 分之间,每轮比赛的分数会被加起来作为最后排名的总分。六轮比赛结束后,选手将根据总分进行排名。如果两个竞争对手得分相同,则字典序上较小的排名再字典序较大的人之前。没有两个竞争者有相同的名字。
养蜂人非常不耐烦,他们想提前知道他们的最终排名是多少。

每个养蜂人都想知道他们在最终排名中可能的最佳和最差位置。作为 C O C B \rm{COCB} COCB 比赛程序员,他们让你告诉他们第六轮后他们可能占据的排名。

输入格式

第一行包含一个正整数 n ( 1 ≤ n ≤ 500 ) n(1≤n≤500) n(1≤n≤500),即养蜂人的数量。

接下来 n n n 行,每行包含一个养蜂人的名称 s i ( 1 ≤ ∣ s i ∣ ≤ 10 ) s_i(1 ≤|s_i|≤10) si​(1≤∣si​∣≤10) 和 5 5 5 个数字 b 1 ⋯ b 5 b_1\cdots b_5 b1​⋯b5​,表示第 i i i 个养蜂人在前 5 5 5 轮比赛的得分。

输出格式

输出 n n n 行。

在第 i i i 行中,输出第 i i i 行的最佳排名和最差排名可能位置。

样例 #1

样例输入 #1

3
pavel 120 200 300 400 500
keko 150 400 300 200 100
bartol 470 120 90 93 189

样例输出 #1

1 2
1 3
2 3

样例 #2

样例输入 #2

2
ante 275 275 275 275 275
mate 25 100 175 250 325

样例输出 #2

1 1
2 2

提示

样例 2:到目前为止, a n t e \rm{ante} ante 是 1375 1375 1375 分, m a t e \rm{mate} mate 是 875 875 875 分。如果 m a t e \rm{mate} mate 在最后一轮赢了 500 500 500 分,并且 a n t e \rm{ante} ante 是 0 0 0 分,结果排名是持平的,他们都有 1375 1375 1375 分。然而,既然是按字典排序, a n t e \rm{ante} ante 比 m a t e \rm{mate} mate 小,所以仍将排名领先。

数据范围:

对于 20 % 20\% 20% 的数据: 1 ≤ n ≤ 2 1\le n\le2 1≤n≤2

对于 100 % 100\% 100% 的数据: 1 ≤ n ≤ 500 1\le n\le500 1≤n≤500, 1 ≤ ∣ s i ∣ ≤ 10 1\le |s_i|\le10 1≤∣si​∣≤10(保证每个人的名字互不相同), 1 ≤ b i ≤ 500 1\le b_i \le500 1≤bi​≤500

本题分值与 COCI 2021-2022#6 分值相同,满分 50 50 50 分

C++实现

#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int score;
node (){
name = “”, score = 0;
}
node (const string &Name, const int &Score){
name = Name, score = Score;
}
bool operator < (const node &x) const {
if (score ^ x.score) return score > x.score;
return name < x.name;
}
}a[503];
int n;
vectorv;
int main(){
cin >> n;
for (int i = 0;i < n;++i){
cin >> a[i].name;
for (int j = 0, k;j < 5;++j){
cin >> k;
a[i].score += k;
}
v.insert(lower_bound(v.begin(), v.end(), a[i]), a[i]);
}
for (int i = 0;i < n;++i){
v.erase(lower_bound(v.begin(), v.end(), a[i]));
printf (“%d “, lower_bound(v.begin(), v.end(), node(a[i].name, a[i].score+500))-v.begin()+1);
printf (”%d\n”, lower_bound(v.begin(), v.end(), node(a[i].name, a[i].score-500))-v.begin()+1);
v.insert(lower_bound(v.begin(), v.end(), a[i]), a[i]);
}
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

标签:Med,COCI2021,name,样例,score,mate,rm,打卡,500
From: https://blog.csdn.net/rogeliu/article/details/145274125

相关文章