小瓜現在讓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 2sample output1 33 4
4 22 0
1 52 6
153題中n<=100000,m<=100。根據題意還可以再詳細一點,即1<=n<=100000,0<=m<=100。426
根據題意,儲存時可按規律儲存,後來插入時只改變下標指向即可。輸出結果時,首先找到隊首元素,然後根據儲存規律順騰摸瓜查詢即可。總結起來就是:按規律儲存+插入改變指向+找到隊首元素+按規律順藤摸瓜輸出。
我第一次提交錯誤就是因為誤把第乙個輸入的佇列元素(即下面**中的測試用例的元素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 ...