PTA 7-47 打印選課學生名單

本題考點:

  • 排序的應用

假設全校有最多40000名學生和最多2500門課程。現給出每個學生的選課清單,要求輸出每門課的選課學生名單。
輸入格式:
輸入的第一行是兩個正整數:N(≤40000),爲全校學生總數;K(≤2500),爲總課程數。此後N行,每行包括一個學生姓名(3個大寫英文字母+1位數字)、一個正整數C(≤20)代表該生所選的課程門數、隨後是C個課程編號。簡單起見,課程從1到K編號。

這道題直接用 vector 存儲即可,但是注意,當數據量很大的時候,cin,cout 用來輸入輸出就不合適了,這個時候應該選擇 scanf,printf 來處理輸入輸出(真是超時解決的一個方法…)。

完整代碼實現如下:


#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#define LOCAL
using namespace std;

#define MAXN 2510

vector<string> lists[MAXN];

int main()
{
#ifdef LOCAL
    freopen("data.txt", "r", stdin);
#endif
    int N, K;
    scanf("%d%d", &N, &K);
    getchar();
    string name;
    char nameChar[5];
    int cnt, classId;
    for (int i = 0; i < N; i++)
    {
        scanf("%s", nameChar);
        name = string(nameChar);
        scanf("%d", &cnt);
        while (cnt--)
        {
            scanf("%d", &classId);
            lists[classId].push_back(name);
        }
        getchar();
    }
    int len;
    for (int i = 1; i <= K; i++)
    {
        sort(lists[i].begin(), lists[i].end());
        printf("%d %d\n", i, lists[i].size());
        for (int j = 0; j < lists[i].size(); j++)
        {   // 字符串轉爲 字符串數組
            len = lists[i][j].copy(nameChar, lists[i][j].size());
            printf("%s\n", nameChar);
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章