P1160 佇列安排 (模擬鍊錶)

2021-08-21 20:01:19 字數 1669 閱讀 3363

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

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

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

3.從佇列中去掉 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:複製

4

1 02 1

1 02

33

輸出樣例#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 。

思路:本題首先我想到了用vector(懶)進行刪除,插入增添。用find函式從vector裡尋找座標位置 超時3個點

所以要優化,省去查詢的這一步,用結構體來記錄數字左右的位置即可。

#include#define maxn 100005

using namespace std;

typedef long long ll;

struct why

}a[maxn];

ll k,p,m,n,flag;

int main()

else

}cin>>m;

while(m--)

int temp = a[0].r;

while(1)

return 0;

}

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 中某位同學 即之前已經入列的同...

P1160 佇列安排

p1160 佇列安排 昨天下午看了一下,感覺肯定要用vector或者佇列,想著自己用的不怎麼好,就沒寫,然後晚上睡不著的時候想到了這題,突然就想到解題辦法了,要不是太晚了我就起床寫了,今天寫了一遍就ac了,哈哈哈 這題比較好玩吧。定義乙個二維陣列,每個數的左右兩個數分別用第二維的陣列0和1存,進行操...