2020 年百度之星 程式設計大賽 初賽二

2021-10-08 13:25:18 字數 1447 閱讀 5505

problem description

科學家小沃沃在研究病毒傳播的規律,從而控制疫情。有 n 個人,編號分別為 1,2,...,n。我們用螢光粉代替病毒,編號為 1 的人,在第 0 時刻塗上了螢光粉,剩下的人在第 0 時刻沒有塗。

對於第 i 個人,我們知道這個人在哪些時刻出現在了哪些地方。

如果時刻 t,某個人和身體上有螢光粉的人,出現在了同一地點,那麼從時刻 t 以後,這個人也會沾上螢光粉。

從小到大輸出實驗結束後身體上有螢光粉的人的編號。

input

第一行乙個整數 t(1≤t≤20)表示 t 組資料。對於每組資料,第一行乙個整數 n(1≤n≤20000)表示 n 個人。 對於第 i 個人,第一行輸入乙個整數 len [i] (1≤len[i]≤100)表示這個人的活動軌跡。 接下來 len[i]行,每行輸入兩個整數 t,p(1≤t≤100,1≤p≤10)表示這個人t時刻出現在了p位置,保證t按嚴格遞增的順序給出。 除了這 len[i]個時刻,這個人都呆在家裡,或者換句話說,他/她不在任何位置。 保證len[1]+len[2]+...+len[n]≤200000。

output

對於每組資料輸出一行,表示所有患者的編號。按編號從小到大輸出。

樣例輸入

242

1122

3223

3441

4412

1331

1316

1341

5161

151

樣例輸出

123

12

我的思路呢,是在輸入的時候,對資料進行乙個預處理,將某一時刻在某乙個位置的人進行分類,然後逐個時間逐個位置的去處理,如果某一時刻的某乙個位置有得病的人,則將在這個時間,在這個位置的所有人全都標記一遍。

本人比賽時的ac**:

#include

using

namespace std;

intmain()

;//記錄某一號人是否得病

vector<

int>se[

120][15

];//乙個三維陣列,來表示在某一時刻的某一位置有誰

int maxx=0;

for(

int i=

1;i<=n;i++)}

for(

int i=

1;i<=

110;i++

)break;}

}}}for

(int i=

1;i<=n;i++)}

printf

("\n");

}}

2023年百度之星程式設計大賽 初賽 1

b problem description 小度熊拿到了乙個無序的陣列,對於這個陣列,小度熊想知道是否能找到乙個k 的區間,裡面的 k 個數字排完序後是連續的。現在小度熊增加題目難度,他不想知道是否有這樣的 k 的區間,而是想知道有幾個這樣的 k 的區間。input 輸入包含一組測試資料。第一行包含...

2023年百度之星程式設計大賽初賽B

圓環 時間限制 1000ms 描述乙個圓環上有n個位置,這n個位置按順時針依次標號為1,2,n。初始時圓環的每個位置上都有乙個1至n之間的整數,且每個整數只出現一次。任何時刻,你可以將圓環上的數全部逆時針旋轉乙個位置,即第i個位置上的數變為原來第i 1個位置上的數,第n個位置上的數變為原來第1個位置...

2019 年百度之星 程式設計大賽 初賽一

傳送門 1 hdu 2 bestcoder 一步可以走乙個或者兩個,求依次進入n個區間 li,ri 的最少步數 就當前位置cur來說,1 如果下乙個任務的區間包括當前位置,那就可以不動 2 如果下乙個任務區間在當前位置左邊,那就向下乙個的左邊界移動 如果正好可以全走兩個格仔的話,就在此位置 如果不可...