P1160 佇列安排 雙向鍊錶

2021-10-09 19:04:00 字數 1519 閱讀 9938

題目描述

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

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

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

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

輸入格式

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

第2−n2-n2−n行,第iii行包含兩個整數k,pk,pk,p,其中kkk為小於iii的正整數,ppp為000或者111。若ppp為000,則表示將iii號同學插入到kkk號同學的左邊,ppp為111則表示插入到右邊。

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

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

輸出格式

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

輸入輸出樣例

輸入 #1

41 0

2 11 023

3輸出 #1

2 4 1

說明/提示

樣例解釋:

將同學222插入至同學111左邊,此時隊列為:

212 121

將同學333插入至同學222右邊,此時隊列為:

2312 3 1231

將同學444插入至同學111左邊,此時隊列為:

23412 3 4 12341

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

2412 4 1241

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

最終佇列:

2412 4 1241

資料範圍

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

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

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

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1e5+10;

struct node

}a[maxn]

;int n, m;

void

insert_data

(int i)

else

}void

del_data()

void

output()

}while

(sum < n)

}int

main()

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

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

P1160 佇列安排 鍊錶

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

洛谷 P1160 佇列安排(雙向鍊錶)

題意 對陣列進行插入刪除操作,很用以就想到用鍊錶。本人習慣用陣列模擬鍊錶 如下 include include include include include using namespace std int righ 100005 lef 100005 int main else if b 1 sc...