乙個學校裡老師要將班上n個同學排成一列,同學被編號為1~n,他採取如下的方法:
先將1
11號同學安排進佇列,這時佇列中只有他乙個人;
2 −n
2-n2−
n號同學依次入列,編號為i的同學入列方式為:老師指定編號為i的同學站在編號為1∼(
i−1)
1\sim (i -1)
1∼(i−1
)中某位同學(即之前已經入列的同學)的左邊或右邊;
從佇列中去掉m(m
m(mm( m個同學,其他同學位置順序不變。 在所有同學按照上述方法佇列排列完畢後,老師想知道從左到右所有同學的編號。 第1 11行為乙個正整數n nn,表示了有n nn個同學。 第2 −n 2-n2− n行,第i ii行包含兩個整數k,p k,pk, p,其中k kk為小於i ii的正整數,p pp為0 00或者1 11。若p pp為0 00,則表示將i ii號同學插入到k kk號同學的左邊,p pp為1 11則表示插入到右邊。 第n +1 n+1n+ 1行為乙個正整數m mm,表示去掉的同學數目。 接下來m mm行,每行乙個正整數x xx,表示將x xx號同學從佇列中移去,如果x xx號同學已經不在佇列中則忽略這一條指令。 第1 11行,包含最多n nn個空格隔開的正整數,表示了佇列從左到右所有同學的編號,行末換行且無空格。4
1 02 1
1 02
33
2 4 1
樣例解釋:
將同學2
22插入至同學1
11左邊,此時隊列為:
21
2 121
將同學3
33插入至同學2
22右邊,此時隊列為:
231
2 3 1
231
將同學4
44插入至同學1
11左邊,此時隊列為:
2341
2 3 4 1
2341
將同學3
33從佇列中移出,此時隊列為:
241
2 4 1
241
同學3
33已經不在佇列中,忽略最後一條指令
最終佇列:
241
2 4 1
241
資料範圍
對於20
%20\%
20%的資料,有n≤10
n≤10
n≤10
;對於40
%40\%
40%的資料,有n
≤1000
n≤1000
n≤1000
;對於100
%100\%
100%
的資料,有n,m
≤100000
n, m≤100000
n,m≤10
0000
。開始用的單向列表,發現雙向也可以。但這都會超時。
複雜度可能為o(n*n),找到資料n,操作可以忽略,共n次。
時間浪費在了查詢上面。
那我們開個陣列,把每個編號同學對號入座,儲存他的左右編號。
需要的時候,直接把他拉過來即可。
附上tle**
#include#include#includeusing namespace std;
struct node ;
int read()
void add(int i,int p1,int k,node *head) else
return;
} am=tep;
tep=tep->next; }}
void del(int p1,node *head)
am=tep;
tep=tep->next; }
}node* build()
void print(node *head)
}int main(void)
int m;
m=read();
for(int i=1;i<=m;i++)
print(head);
}
pe[0]相當於頭結點,不然你去**找第一人。
第一次用陣列模擬鍊錶,感覺有點新鮮呀。
#include#include#includeusing namespace std;
struct node ;
node pe[100003];
int read()
void add(int i,int p1,int k)
else }
void del(int p1)
node build()
void print()
} else break;
tep=pe[tep].next; }}
int main(void)
int m;
m=read();
for(int i=1;i<=m;i++)
print();
}
P1160 佇列安排
p1160 佇列安排 昨天下午看了一下,感覺肯定要用vector或者佇列,想著自己用的不怎麼好,就沒寫,然後晚上睡不著的時候想到了這題,突然就想到解題辦法了,要不是太晚了我就起床寫了,今天寫了一遍就ac了,哈哈哈 這題比較好玩吧。定義乙個二維陣列,每個數的左右兩個數分別用第二維的陣列0和1存,進行操...
P1160 佇列安排
乙個學校裡老師要將班上n個同學排成一列,同學被編號為1 n,他採取如下的方法 1.先將1號同學安排進佇列,這時佇列中只有他乙個人 2.2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 i 1中某位同學 即之前已經入列的同學 的左邊或右邊 3.從佇列中去掉m m在所有...
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...