列印選課學生名單

2021-09-24 15:19:14 字數 1421 閱讀 4461

假設全校有最多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位數字 乙個正整數...