假設全校有最多40000名學生和最多2500門課程。現給出每個學生的選課清單,要求輸出每門課的選課學生名單。
輸入格式:
輸入的第一行是兩個正整數:n(≤40000),為全校學生總數;k(≤2500),為總課程數。此後n行,每行包括乙個學生姓名(3個大寫英文本母+1位數字)、乙個正整數c(≤20)代表該生所選的課程門數、隨後是c個課程編號。簡單起見,課程從1到k編號。
輸出格式:
順序輸出課程1到k的選課學生名單。格式為:對每一門課,首先在一行中輸出課程編號和選課學生總數(之間用空格分隔),之後在第二行按字典序輸出學生名單,每個學生名字佔一行。
輸入樣例:
10 5
zoe1 2 4 5
ann0 3 5 2 1
bob5 5 3 4 2 1 5
joe4 1 2
jay9 4 1 2 5 4
fra8 3 4 2 5
don2 2 4 5
amy7 1 5
kat3 3 5 4 2
lor6 4 2 4 1 5
輸出樣例:
1 4ann0
bob5
jay9
lor6
2 7ann0
bob5
fra8
jay9
joe4
kat3
lor6
3 1bob5
4 7bob5
don2
fra8
jay9
kat3
lor6
zoe1
5 9amy7
ann0
bob5
don2
fra8
jay9
kat3
lor6
zoe1
開始想到用鍊錶+二分。想想自己不能實現,於是額就陣列了;
陣列的話要開為全域性變數,否則空間不夠,程式異常退出
#include#include#include#includeusing namespace std;
typedef struct node st;
struct node;
bool cmp(st a,st b)
struct pro;
st stu[40000+1];
struct pro pro[2500+1];
int main(void)
for(int i=1;i<=n;i++) }
sort(stu+1,stu+n+1,cmp);
// printf("%s*********",stu[1].name);
for(int i=1;i<=n;i++) }
for(int i=1;i<=k;i++)
}} return 0;
}
列印選課學生名單 (25 分)
假設全校有最多40000名學生和最多2500門課程。現給出每個學生的選課清單,要求輸出每門課的選課學生名單。輸入的第一行是兩個正整數 n 40000 為全校學生總數 k 2500 為總課程數。此後n行,每行包括乙個學生姓名 3個大寫英文本母 1位數字 乙個正整數c 20 代表該生所選的課程門數 隨後...
7 47 列印選課學生名單
7 47 列印選課學生名單 25 分 假設全校有最多40000名學生和最多2500門課程。現給出每個學生的選課清單,要求輸出每門課的選課學生名單。輸入的第一行是兩個正整數 n 40000 為全校學生總數 k 2500 為總課程數。此後n行,每行包括乙個學生姓名 3個大寫英文本母 1位數字 乙個正整數...
7 47 列印選課學生名單 (25 分)
7 47 列印選課學生名單 25 分 假設全校有最多40000名學生和最多2500門課程。現給出每個學生的選課清單,要求輸出每門課的選課學生名單。輸入的第一行是兩個正整數 n 40000 為全校學生總數 k 2500 為總課程數。此後n行,每行包括乙個學生姓名 3個大寫英文本母 1位數字 乙個正整數...