版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/84932624
我的数据结构与算法题目集代码仓:https://github.com/617076674/Data-structure-and-algorithm-topic-set
原题链接:https://pintia.cn/problem-sets/15/problems/894
题目描述:
知识点:vector集合的应用、排序
思路:用vector集合保存每门课程对应的学生
一开始我是用set集合保存每门课程对应的学生数量,这样就省去了排序的过程,但这样做会导致测试点5超时。不如先用vector集合存储每门课程对应的学生,再进行排序来得快。
时间复杂度和空间复杂度均与每门课程对应的学生数量有关。
C++代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int N, K;
vector<string> course[2501];
int main(){
scanf("%d %d", &N, &K);
for(int i = 0; i < N; i++){
char name[5];
scanf("%s", name);
int C;
scanf("%d", &C);
for(int j = 0; j < C; j++){
int num;
scanf("%d", &num);
course[num].push_back(name);
}
}
for(int i = 1; i <= K; i++){
printf("%d %d\n", i, course[i].size());
sort(course[i].begin(), course[i].end());
for(int j = 0; j < course[i].size(); j++){
printf("%s\n", course[i][j].c_str());
}
}
return 0;
}
C++解题报告: