洛谷 P1160 佇列安排

2021-07-26 08:26:11 字數 1831 閱讀 7217

題目描述

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

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

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

3.從佇列中去掉m(m

type node=record

id,pre,suc:longint;

end;

var a:array[0..100001]of node;

v:array[0..100001]of longint;

n,m,h,t,i,x,z:longint;

begin

readln(n);

a[1].id:=1;

a[1].pre:=0;h:=1;

a[1].suc:=0;t:=1;

for i:=2

to n do

begin

readln(x,z);

a[i].id:=i;

case z of

0:begin

if a[x].pre=0

then

begin

a[i].pre:=0;

a[i].suc:=a[x].id;

a[x].pre:=a[i].id;

h:=i;

endelse

begin

a[i].pre:=a[a[x].pre].id;

a[a[x].pre].suc:=a[i].id;

a[i].suc:=a[x].id;

a[x].pre:=a[i].id;

end;

end;

1:begin

if a[x].suc=0

then

begin

a[i].suc:=0;

a[i].pre:=a[x].id;

a[x].suc:=a[i].id;

endelse

begin

a[i].suc:=a[a[x].suc].id;

a[a[x].suc].pre:=a[i].id;

a[i].pre:=a[x].id;

a[x].suc:=a[i].id;

end;

end;

end;

end;t:=h;z:=0;

while t<>0

dobegin

inc(z);

v[t]:=z;

t:=a[t].suc;

end;

readln(m);

for i:=1

to m do

begin

readln(x);

if v[x]=0

then

continue;

if a[x].pre=0

then

begin a[a[x].suc].pre:=0;h:=a[x].suc;end

else

if a[x].suc=0

then

a[a[x].pre].suc:=0

else

begin a[a[x].pre].suc:=a[x].suc;

a[a[x].suc].pre:=a[x].pre;end;

v[x]:=0;

end;t:=h;

while t<>0

dobegin

write(t,' ');

t:=a[t].suc;

end;

end.

洛谷P1160 佇列安排

乙個學校裡老師要將班上n個同學排成一列,同學被編號為1 n,他採取如下的方法 1.先將1號同學安排進佇列,這時佇列中只有他乙個人 2.2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 i 1中某位同學 即之前已經入列的同學 的左邊或右邊 3.從佇列中去掉m m在所有...

洛谷P1160 佇列安排

乙個學校裡老師要將班上nn個同學排成一列,同學被編號為1 sim n1 n,他採取如下的方法 先將11號同學安排進佇列,這時佇列中只有他乙個人 2 n2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 sim i 1 1 i 1 中某位同學 即之前已經入列的同學 的左...

洛谷 P1160 佇列安排

題目描述 乙個學校裡老師要將班上nn個同學排成一列,同學被編號為1 sim n1 n,他採取如下的方法 先將11號同學安排進佇列,這時佇列中只有他乙個人 2 n2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 sim i 1 1 i 1 中某位同學 即之前已經入列的...