Skip to content

Course List for Student

题目链接:1039 Course List for Student (25 point(s))

题干大意

给定课程对应的选课学生,然后给你学生名字查询该学生选的课程信息。

思路

使用map,由于unordered_map效率更高,使用之建立学生名字与存储的下标的对应关系。

codeup中提交的话会超时,解决办法是将去掉map、去掉cin改为scanf、去掉cout改为printf以及将string改为char数组。

AC代码

C++
#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;

int main()
{
    int N, K;
    cin >> N >> K;
    vector<vector<int>>        stu;
    unordered_map<string, int> map;
    int                        k = 0;
    for (int i = 0; i < K; ++i) {
        int id, num;
        cin >> id >> num;
        for (int j = 0; j < num; ++j) {
            string name;
            cin >> name;
            if (map.find(name) == map.end()) {
                map[name] = k++;
                stu.emplace_back();
            }
            stu[map[name]].emplace_back(id);
        }
    }
    for (int i = 0; i < N; ++i) {
        string name;
        cin >> name;
        cout << name << " " << ((map.find(name) == map.end()) ? 0 : stu[map[name]].size());
        if (map.find(name) == map.end()) {
            if (i != N - 1)
                cout << endl;
            continue;
        }
        sort(stu[map[name]].begin(), stu[map[name]].end());
        for (auto& entry : stu[map[name]])
            cout << " " << entry;
        if (i != N - 1)
            cout << endl;
    }
    return 0;
}