PTA 資料結構及演算法 7 47 列印選課學生名單

2021-09-25 10:40:03 字數 1862 閱讀 6537

如有不對,不吝賜教

進入正題:

假設全校有最多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

這道題目就是hash桶的使用,以課程為桶來將學生分類,然後插入學生的時候注意按照字典序來插入,這裡我選擇了鍊錶(圖個方便),結果就在最後乙個點超時了,因為時間複雜度到了o(n^2)嗎,別人用c++中的vector然後在排序的時間已經是452ms了(見 清風逐塵乀),所以更別說時間複雜度這麼高的了。(不過有二叉樹之類的資料結構就沒啥事了)。

#include

#include

#include

struct class

;void

insert

(struct class *course,

char

**name,

int identifier)

;int

main

(void

)//初始化課程表

for(i=

0;ifor(i=

0;ifor(i=

0;i)for

(i=0

;ireturn0;

}void

insert

(struct class *course,

char

**name,

int identifier)

while

(cur-

>next)

newone-

>next=cur-

>next;

cur-

>next=newone;

return

;}

測試結果:

PTA 資料結構與演算法 堆疊

1.棧底元素是不能刪除的元素。1分 tf 2.對順序棧進行進棧 出棧操作不涉及元素的前 後移動問題。1分 tf 3.若用data 1 m 表示順序棧的儲存空間,則對棧的進棧 出棧操作最多只能進行m次。1分 tf 4.通過對堆疊s操作 push s,1 push s,2 pop s push s,3 ...

PTA 資料結構與演算法 佇列

1.在用陣列表示的迴圈佇列中,front值一定小於等於rear值。1分 tf 2.迴圈佇列執行出隊操作時會引起大量元素的移動。1分 tf 3.棧是插入和刪除只能在一端進行的線性表 佇列是插入在一端進行,刪除在另一端進行的線性表。1分 tf 4.n個元素進隊的順序和出隊的順序總是一致的。1分 tf 1...

PTA 資料結構與演算法 回溯

1.在4皇后問題中,x1,x2,x3,x4 對應4個皇后位置的列下標。在回溯剪枝過程中,狀態 1,4,2,會在 2,4,1,之前被檢查,並且它們對應的分支都沒有解。tf 2.西洋棋四皇后問題僅有 2 個不同的解。tf 1.給定收費公路重建問題的距離集d 首先可以確定的是 x1 0 和 x6 8。下列...