刷題篇 佇列

2021-10-02 03:54:27 字數 4509 閱讀 8393

題目描述

\quad

有n個小組要排成乙個佇列,每個小組中有若干人。當乙個人來到佇列時,如果佇列中已經有了自己小組的成員,他就直接插隊排在自己小組成員的後面,否則就站在隊伍的最後面。請你編寫乙個程式,模擬這種小組佇列。

輸入格式

\quad

輸入將包含乙個或多個測試用例。對於每個測試用例,第一行輸入小組數量t。接下來t行,每行輸入乙個小組描述,第乙個數表示這個小組的人數,接下來的數表示這個小組的人的編號。編號是0到999999範圍內的整數。乙個小組最多可包含1000個人。

\quad

最後,命令列表如下。 有三種不同的命令:

\quad

每個命令佔一行。當輸入用例t=0時,代表停止輸入。需注意:測試用例最多可包含200000(20萬)個命令,因此小組佇列的實現應該是高效的:入隊和出隊都需要使用常數時間。

輸出樣例

\quad

對於每個測試用例,首先輸出一行「scenario #k」,其中k是測試用例的編號。然後,對於每個dequeue命令,輸出出隊的人的編號,每個編號佔一行。在每個測試用例(包括最後乙個測試用例)輸出完成後,輸出乙個空行。

資料範圍

1 ≤t

≤1000

1≤t≤1000

1≤t≤10

00輸入樣例

2

3101

102103

3201

202203

enqueue 101

enqueue 201

enqueue 102

enqueue 202

enqueue 103

enqueue 203

dequeue

dequeue

dequeue

dequeue

dequeue

dequeue

stop25

259001

259002

259003

259004

259005

6260001

260002

260003

260004

260005

260006

enqueue 259001

enqueue 260001

enqueue 259002

enqueue 259003

enqueue 259004

enqueue 259005

dequeue

dequeue

enqueue 260002

enqueue 260003

dequeue

dequeue

dequeue

dequeue

stop

0

輸出樣例

scenario #1

101102

103201

202203

scenario #2

259001

259002

259003

259004

259005

260001

思路:可以給每個小組queueperson[i]乙個佇列記錄其出隊入隊情況,還需要用乙個佇列記錄小組之間的順序queueteam,用乙個陣列記錄每個小朋友id對應的組別。

程式(cpp)

#include

#include

#include

using

namespace std;

const

int n =

1010

, m =

1e7+10;

int id[m]

;int

main()

} string q;

queue<

int> team;

queue<

int> person[n]

;while

(cin >> q && q[0]

!='s'

)else

// 出隊操作

} cout << endl;

// 別忘了輸出格式中每一種情況後有換行

}}

題目描述

\quad

蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有 n 只蚯蚓,第 i 只蚯蚓的長度為 ai ,所有蚯蚓的長度都是非負整數,即可能存在長度為0的蚯蚓。每一秒,神刀手會在所有的蚯蚓中,準確地找到最長的那乙隻,將其切成兩段。若有多隻最長的,則任選乙隻。神刀手切開蚯蚓的位置由有理數 p 決定。乙隻長度為 x 的蚯蚓會被切成兩隻長度分別為 ⌊px⌋ 和 x−⌊px⌋ 的蚯蚓。特殊地,如果這兩個數的其中乙個等於0,則這個長度為0的蚯蚓也會被保留。此外,除了剛剛產生的兩隻新蚯蚓,其餘蚯蚓的長度都會增加乙個非負整數 q 。蛐蛐國王知道這樣不是長久之計,因為蚯蚓不僅會越來越多,還會越來越長。蛐蛐國王決定求助於一位有著洪荒之力的神秘人物,但是救兵還需要 m 秒才能到來。蛐蛐國王希望知道這 m 秒內的戰況。具體來說,他希望知道:

輸入格式

\quad

第一行包含六個整數 n,m,q,u,v,t,其中:n,m,q 的意義參考題目描述;u,v,t 均為正整數;你需要自己計算 p=u/v(保證 0\quad

第二行包含 n 個非負整數,為 a1,a2,…,an,即初始時 n 只蚯蚓的長度。

\quad

同一行中相鄰的兩個數之間,恰好用乙個空格隔開。

輸出格式

\quad

第一行輸出 ⌊m/t⌋ 個整數,按時間順序,依次輸出第 t 秒,第 2t 秒,第 3t 秒,……被切斷蚯蚓(在被切斷前)的長度。

\quad

第二行輸出 ⌊(n+m)/t⌋ 個整數,輸出 m 秒後蚯蚓的長度;需要按從大到小的順序,依次輸出排名第 t,第 2t,第 3t,……的長度。

\quad

同一行中相鄰的兩個數之間,恰好用乙個空格隔開。即使某一行沒有任何數需要輸出,你也應輸出乙個空行。請閱讀樣例來更好地理解這個格式。

資料範圍

1 ≤n

≤105

1≤n≤10^5

1≤n≤10

5,0 ≤a

i≤

1080≤a_i≤108

0≤ai​≤

108,

0

<

p<10

0<

p<1,

0 ≤q

≤200

0≤q≤200

0≤q≤20

0,0 ≤m

≤7

∗106

0≤m≤7∗106

0≤m≤7∗

106,

0

<

u

1090

0<

u109,

1 ≤t

≤71

1≤t≤71

1≤t≤71

輸入樣例

371

1313

32

輸出樣例

344

4556

6665

5443

22

樣例解釋:

樣例中,在神刀手到來前:3只蚯蚓的長度為3,3,2。

1秒後:乙隻長度為3的蚯蚓被切成了兩隻長度分別為1和2的蚯蚓,其餘蚯蚓的長度增加了1。最終4只蚯蚓的長度分別為(1,2),4,3。 括號表示這個位置剛剛有乙隻蚯蚓被切斷。

2秒後:乙隻長度為4的蚯蚓被切成了1和3。5只蚯蚓的長度分別為:2,3,(1,3),4。

3秒後:乙隻長度為4的蚯蚓被切斷。6只蚯蚓的長度分別為:3,4,2,4,(1,3)。

4秒後:乙隻長度為4的蚯蚓被切斷。7只蚯蚓的長度分別為:4,(1,3),3,5,2,4。

5秒後:乙隻長度為5的蚯蚓被切斷。8只蚯蚓的長度分別為:5,2,4,4,(1,4),3,5。

6秒後:乙隻長度為5的蚯蚓被切斷。9只蚯蚓的長度分別為:(1,4),3,5,5,2,5,4,6。

7秒後:乙隻長度為6的蚯蚓被切斷。10只蚯蚓的長度分別為:2,5,4,6,6,3,6,5,(2,4)。

所以,7秒內被切斷的蚯蚓的長度依次為3,4,4,4,5,5,6。

7秒後,所有蚯蚓長度從大到小排序為6,6,6,5,5,4,4,3,2,2。

leetcode刷題 開始篇

第一道題 reverse words in a string.也就是說翻轉乙個字串的單詞。例如輸入為 hello world,it suck but i love it.輸出為 it love it but suck it world,hello 基本思路為 首先進行整個字串的reverse。然後對...

LeetCode刷題 演算法篇

暴力解法 class solution def twosum self,nums list int target int list int i 0 while i j i 1 while j if nums i nums j target return i,j j 1i 1 return none ...

python刷題 單調佇列

class solution def maxslidingwindow self,nums list int k int list int from collections import deque queue deque res for i in range len nums if i k 1 先...