乙個學校裡老師要將班上 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:複製1 02 1
1 02
33
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存,進行操...