链接:https://ac.nowcoder.com/acm/contest/59840/F 来源:牛客网 下个学期XCPC有很多场比赛,但是每支队伍被限定每年只能参加一部分的比赛,这让身为队长的 Newbie_QQH犯难了,该如何做赛站选择,于是他找到了你来帮他解决这个问题。 问题是这样的: XCPC一共有N场比赛,每支队伍只能参加K场比赛。 赛站信息包括赛站名字,赛站难度,赛站距离,是否有参赛资格。 赛站名字用字符串表示。 通过对每个赛站的研究,队长对每场比赛都得出了一个难度系数。(不同赛站的难度系数可能相同) 每一场赛站的参赛要求不同,如果没有参赛资格就不能报名参赛。 Newbie_QQH想参加尽可能更简单的比赛,如果比赛的难度系数相同,他会倾向选赛站距离更近的比赛。请你帮他设计程序选择比赛。 输出选择赛站数量和赛站的信息。 如果有多个赛站选择,优先输出难度系数简单,赛站距离更近的比赛,保证不会有两个难度系数和赛站距离都一样的赛站。 输入描述: 第1行输入两个整数N和K,代表比赛数量,参赛限制 第2-N+1行每行输入Si,Ai,Bi,Ci,代表赛站名字,难度,距离,是否有参赛资格(1代表有资格,0代表无资格) 输出描述: 第一行输出参加赛站的数量cnt 接下来cnt行输出赛站信息。 示例1 输入 复制 5 2 icpc_shenyang 100 20 1 icpc_xian 10 20 1 icpc_jinan 10 20 0 icpc_nanjin 20 15 1 icpc_hangzhou 20 18 1 输出 复制 2 icpc_xian 10 20 1 icpc_nanjin 20 15 1用代码表示出来
时间: 2024-03-30 13:36:37 浏览: 102
以下是使用C++实现的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Game {
string name;
int difficulty;
int distance;
bool qualification;
};
bool cmp(const Game& g1, const Game& g2) {
if (g1.difficulty != g2.difficulty) {
return g1.difficulty < g2.difficulty;
} else {
return g1.distance < g2.distance;
}
}
int main() {
int n, k;
cin >> n >> k;
vector<Game> games;
for (int i = 0; i < n; i++) {
Game game;
cin >> game.name >> game.difficulty >> game.distance >> game.qualification;
if (game.qualification) {
games.push_back(game);
}
}
sort(games.begin(), games.end(), cmp);
int cnt = min(k, (int)games.size());
cout << cnt << endl;
for (int i = 0; i < cnt; i++) {
cout << games[i].name << " " << games[i].difficulty << " " << games[i].distance << " " << games[i].qualification << endl;
}
return 0;
}
```
代码思路:
1. 定义结构体`Game`,存储每场比赛的信息,包括比赛名字、难度、距离和是否有参赛资格。
2. 读入每场比赛的信息,如果有参赛资格则存入`vector`中。
3. 对存储参赛比赛的`vector`按照难度和距离进行排序,优先选择难度低、距离近的比赛。
4. 根据参赛限制,输出选择的比赛数量和比赛信息。
阅读全文