某次程序设计竞赛时,最终排名采用的排名规则如下: 根据成功做出的题数(设为solved)从大到小排序,若solved相同则按输入顺序确定排名先后顺序(请结合输出样例)。请确定最终排名并输出。
时间: 2023-06-09 14:05:49 浏览: 169
好的,我了解了你的问题。以下是我的回答:
假设有n个参赛者,他们的成功做出题目数分别为s1, s2,...,sn。首先,我们将参赛者按照做出的题目数solved从大到小排序,得到排名r1, r2,...,rn。若有多人成功做出了相同的题目数,我们再按照他们的输入顺序确定排名先后顺序。具体实现时,我们可以使用一个map记录每个参赛者成功做出的题目数以及他们的输入顺序。然后,我们对map中的项按照题目数从大到小排序,再按照输入顺序依次输出。
下面是一个示例程序,演示了如何根据输入获取参赛者信息并且按照排名输出参赛者列表:
```
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
// 定义一个结构体,表示参赛者
struct Contestant {
int solved; // 成功做出的题目数
int order; // 输入顺序
};
// 比较函数,用于map中的排序
bool comp(const pair<int, Contestant>& a, const pair<int, Contestant>& b) {
if (a.second.solved != b.second.solved) {
return a.second.solved > b.second.solved;
} else {
return a.second.order < b.second.order;
}
}
int main() {
int n;
cin >> n;
// 用map记录每个参赛者的信息
map<int, Contestant> contestants;
for (int i = 1; i <= n; ++i) {
int solved;
cin >> solved;
contestants[i] = {solved, i};
}
// 对map中的内容按照排名从大到小排序
vector<pair<int, Contestant>> vec(contestants.begin(), contestants.end());
sort(vec.begin(), vec.end(), comp);
// 按照排名输出参赛者列表
for (int i = 0; i < vec.size(); ++i) {
cout << vec[i].first << " ";
}
return 0;
}
```
希望我的回答能够解决你的问题。如果你还有其他问题,请随时向我提问。