c++统计各参赛运动员比赛场次,第一行输入测试数据组数n(0<n<=10)。 以下每组数据占2行,第一行输入参赛运动员人数和比赛场数,数据之间由空格分隔。 第二行(如无比赛场次,则缺省第二行数据)输入各场比赛的参赛运动员序号对,数据之间由空格分隔。(注意:如果比赛场数为0,则没有第二行输入数据。)
时间: 2024-03-11 22:49:05 浏览: 17
以下是一个示例代码,可以实现统计各参赛运动员比赛场次的功能:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
int m, k;
cin >> m >> k;
vector<int> cnt(m + 1);
while (k--) {
int p;
cin >> p;
vector<int> v(p);
for (int i = 0; i < p; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for (int x : v) {
cnt[x]++;
}
}
for (int i = 1; i <= m; i++) {
cout << cnt[i] << " ";
}
cout << endl;
}
return 0;
}
```
代码的大致思路如下:
1. 读入测试数据组数n,进入循环。
2. 对于每组数据,读入参赛运动员人数m和比赛场数k,初始化一个大小为m+1的计数器cnt(下标从1开始)。
3. 对于每场比赛,读入参赛运动员序号对,将序号对按升序排序并去重,然后对每个参赛运动员在计数器中加1。
4. 输出计数器中每个参赛运动员的场次。
5. 回到第1步,直到所有测试数据处理完毕。
需要注意的是,本题中的参赛运动员序号从1开始,因此计数器的大小需要为m+1。在读入比赛序号对后,需要先对其进行排序和去重,避免同一场比赛中重复计算同一位参赛运动员的场次。