P1160 佇列安排

2022-05-13 13:17:57 字數 1589 閱讀 7160

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

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

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

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

輸入格式:

輸入檔案arrange.in的第1行為乙個正整數n,表示了有n個同學。

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

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

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

輸出格式:

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

輸入樣例#1:

4

1 02 1

1 02

33

輸出樣例#1:

2 4 1

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

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

2 3 1

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

2 3 4 1

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

2 4 1

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

最終佇列:

2 4 1

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

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

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

標籤是佇列但是正解是鍊錶。。

思路比較清晰,就是個鍊錶。

但是邏輯可能稍微有點複雜

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int read(int &n)

715 n=x;16}

17const

int maxn=100001;18

struct

node

19s[maxn];

22int n,m,where

,how;

23int

main()

2433 s[1].pos=1;34

for(int i=2;i<=n;i++)

3549}50

else

5158}59

60read(m);

61for(int i=1;i<=m;i++)

6271

for(int i=1;i<=n;i++)

7282}83

}84return0;

85 }

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存,進行操...

P1160 佇列安排

題目鏈結 很裸的一道佇列的題 方法一 沒審清題目,直接就來寫,笨笨得每次都掃瞄一遍鍊錶導致tle,最後得分40分 1 include2 using namespace std 3int n,k,p,m,x 4struct lb 9 lb l 100010 10 int tail 1 隊尾計數 11i...