佇列復原2

2021-10-02 22:20:27 字數 1461 閱讀 2311

小瓜現在讓1到n這n個整數排成一列,但是他只告訴你每個整數的後面那個數是什麼(最後乙個整數的後面那個數是0)。此外,他還打算在這個佇列中插入m個整數,他將告訴你這m個整數插入的位置。請你幫忙復原插入m個整數之後的佇列。

input

第一行兩個整數n(n<=100000)和m(m<=100),表示有n個整數,後續又將插入m個整數。 接下來n行,每行兩個數i,j,表示排在整數i後面的那個數是j。 接下來m行,每行兩個數a,b,表示在編號為a的數後面插入編號為b的數。(保證 n+1 <= b <= n+m)

output

n+m行,表示復原後的佇列。

sample input

4 2

1 33 4

4 22 0

1 52 6

sample output

153

426

題中n<=100000,m<=100。根據題意還可以再詳細一點,即1<=n<=100000,0<=m<=100。

根據題意,儲存時可按規律儲存,後來插入時只改變下標指向即可。輸出結果時,首先找到隊首元素,然後根據儲存規律順騰摸瓜查詢即可。總結起來就是:按規律儲存+插入改變指向+找到隊首元素+按規律順藤摸瓜輸出。

我第一次提交錯誤就是因為誤把第乙個輸入的佇列元素(即下面**中的測試用例的元素1)當做隊首元素,事實上隊首元素是0~n中沒有在j**現的那個數(即下面**中的測試用例的元素2),不是第乙個輸入的佇列元素這麼簡單。但我之前沒有想到,直到遇到了下面**裡的那一組測試用例,一下子就讓我發現了我的錯誤,可見好的測試用例是多麼的重要。

ac**:

#include

using

namespace std;

intmain()

;for

(k=1

; k<=n; k++

)for

(k=1

; k<=m; k++

)for

(k=0

;k<=n;k++

)//b陣列用來標記,j屬於後面的元素,肯定不是隊首元素,所以把非隊首元素標記為1。

} cout

for(k=

1;k<=m+n-

1;k++

)//根據隊首元素然後順騰摸瓜繼續找

return0;

}/*4 11 3

2 44 1

3 01 9

*/

永遠相信美好?

佇列2 迴圈佇列

我們來看下上次我們寫下的queue struct queue 增加乙個 void pop 彈出第乙個 bool empty 是否為空 int num 返回有多少個元素 int gethead 獲取第乙個元素 現在我們增加乙個功能,獲取第i個元素。int getnum int x 好的,開始在裡邊填充...

2階魔方的復原的BFS寫法。。。。

二階魔方 8個角塊的位置均可進行任意互換 8 種狀態 如果以乙個角塊不動作為參考角塊,其他7個角塊都能任意轉換方向 即37種狀態 如果在空間中旋轉則不計算方向不同而狀態相同的魔方,實際上的準確狀態數還應除以24。所以二階魔方的總狀態數應該為 二階魔方的最遠復原距離 即最需要最多步驟復原的狀態 為11...

復原IP位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 class solution public void help string sub string cur,listres int ...