題目描述
乙個學校裡老師要將班上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...