[CCC 2024 J3] Bronze Count
题目描述
一次比赛结束后,您可能迫切地想知道有多少参赛者获得了铜牌?
金牌会授予所有获得最高分的参赛者。银牌会授予获得第二高分的所有参赛者。铜牌会授予获得第三高分的所有参赛者。
给定一份参赛选手的成绩列表,请求出获得铜牌所需的分数以及有多少人正好得到这一分数。
输入格式
输入的第一行包含一个正整数 N N N 表示参赛者的数量。
接下来 N N N 行包含一个整数表示一个参赛者的分数。
保证每个分数都在 0 0 0 到 75 75 75 之间(包含)并且至少存在三个不同的分数。
输出格式
输出一个非负整数 S S S 和一个正整数 P P P 用空格隔开。其中 S S S 是得到铜牌所需要的分数, P P P 是正好得到这个分数的参赛者数量。
样例 #1
样例输入 #1
4
70
62
58
73
样例输出 #1
62 1
样例 #2
样例输入 #2
8
75
70
60
70
70
60
75
70
样例输出 #2
60 2
提示说明
【样例 1 解释】
得到铜牌需要 62 62 62 分并且有一个参赛者正好得到这一分数。
【样例 2 解释】
得到铜牌需要 60 60 60 分并且有两个参赛者正好得到这一分数。
【数据范围】
本题采用捆绑测试。
对于所有数据,保证 1 ≤ N ≤ 2.5 × 1 0 5 1\leq N\leq 2.5\times 10^5 1≤N≤2.5×105,分数 s s s 满足 0 ≤ s ≤ 75 0\leq s\leq 75 0≤s≤75,至少存在三个不同的分数。
下面的表格显示了 15 15 15 分的分配方案:
分值 | 描述 | 范围 |
---|---|---|
6 6 6 | 分数互不相同并且参赛者数量很少。 | N ≤ 50 N \leq 50 N≤50 |
7 7 7 | 分数可能存在相同并且参赛者数量很少。 | N ≤ 50 N \leq 50 N≤50 |
2 2 2 | 分数可能存在相同并且参赛者数量可以很大。 | N ≤ 2.5 × 1 0 5 N \leq 2.5 \times 10^5 N≤2.5×105 |
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射/* */
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a,sum[80],ans,cnt;
int main()
{
ll n;
cin>>n;
for(ll i=1;i<=n;i++)
{
ll a;
cin>>a;
sum[a]++;
}
ll cnt=0,ans=0;
for(ll i=75;i>=0;i--)
{
if(sum[i]!=0) cnt++;
if(cnt==3)
{
ans=sum[i];
cnt=i;
break;
}
}
cout<<cnt<<" "<<ans<<endl;
return 0;
}