P1160 佇列安排(C 雙向鍊錶 佇列

2021-10-02 12:00:35 字數 2129 閱讀 6227

乙個學校裡老師要將班上n個同學排成一列,同學被編號為1∼n,他採取如下的方法:

先將1號同學安排進佇列,這時佇列中只有他乙個人;

2−n號同學依次入列,編號為i的同學入列方式為:老師指定編號為i的同學站在編號為1∼(i−1)中某位同學(即之前已經入列的同學)的左邊或右邊;

從佇列中去掉m(m在所有同學按照上述方法佇列排列完畢後,老師想知道從左到右所有同學的編號。

第1行為乙個正整數n,表示了有n個同學。

第2−n行,第ii行包含兩個整數k,p,其中k為小於ii的正整數,p為0或者1。若p為0,則表示將i號同學插入到k號同學的左邊,p為1則表示插入到右邊。

第n+1行為乙個正整數m,表示去掉的同學數目。

接下來m行,每行乙個正整數x,表示將x號同學從佇列中移去,如果x號同學已經不在佇列中則忽略這一條指令。

1行,包含最多n個空格隔開的正整數,表示了佇列從左到右所有同學的編號,行末換行且無空格。

輸入 #1

41 0

2 11 023

3輸出 #1

2 4 1

樣例解釋:

將同學2插入至同學1左邊,此時隊列為:

21將同學3插入至同學2右邊,此時隊列為:

231將同學4插入至同學1左邊,此時隊列為:

2341

將同學3從佇列中移出,此時隊列為:

241同學3已經不在佇列中,忽略最後一條指令

最終佇列:

241對於20%的資料,有n≤10;

對於40%的資料,有n≤1000;

對於100%的資料,有n,m≤100000。

我是信了洛谷演算法標籤的邪,我居然真的模擬了佇列結構,被find()坑死,所以也理所當然的tle了三個點。

#include

using

namespace std;

intmain()

int m;

cin >> m;

for(

int i =

0; i < m; i++

)for

(int i =

0; a.

begin()

+ i != a.

end(

); i++

) cout << a[i]

<<

" ";

return0;

}

聽題解區dalao說單鏈表會超時,但雙向鍊錶不會,所以我就去用了雙向鍊錶,結果tle得我腦闊疼(我還是太天真了 ),逼得我加了兩層優化,也就是乙個used陣列還有乙個better陣列,better陣列是後來加的也是重點,所以我覺得used陣列可以刪掉,你要是看到這段話的話可以試著刪掉used 陣列的相關操作,這樣**也簡潔些~

#include

using

namespace std;

int used[

100001];

//優化刪除過程中的查詢

class

node

;node* better[

100001];

//優化整體查詢過程

node* head =

new node;

node*

search

(int k)

//查詢元素

return nullptr;*/

return better[k];}

intmain()

else

}else

//插入右側

else

} better[i]

= q;

}int m;

cin >> m;

for(

int i =

0; i < m; i++

)else

temp-

>front-

>next =

nullptr

;else

head = head-

>next;

used[k]=0

; better[k]

=nullptr;}

} node* p = head;

while

(p)return0;

}

P1160 佇列安排 雙向鍊錶

題目描述 乙個學校裡老師要將班上nnn個同學排成一列,同學被編號為1 n1 sim n1 n,他採取如下的方法 先將111號同學安排進佇列,這時佇列中只有他乙個人 2 n2 n2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 i 1 1 sim i 1 1 i 1 ...

P1160 佇列安排 鍊錶

評測記錄 有 n n 個人,編號是1 n role presentation 1 n 1 n,然後開始時插入第乙個人,之後每次可以插入到乙個人的左邊或右邊,然後去掉 m m 個人,最後輸出佇列順序。裸的鍊錶題 插入操作 if c else 刪除操作 node node x prev next nod...

P1160 佇列安排

乙個學校裡老師要將班上n個同學排成一列,同學被編號為1 n,他採取如下的方法 先將1 11號同學安排進佇列,這時佇列中只有他乙個人 2 n 2 n2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 i 1 1 sim i 1 1 i 1 中某位同學 即之前已經入列的同...