题目描述
你有N(2<=N<=10000)张牌,每张牌有一个数字,一开始从第一张到最后一张分别为1到N,你可以进行以下操作,每个操作用两个数a和b表示,其中a表示操作方式,当a取1到3时,b表示这种方式进行的次数,下面是对个操作的描述:
a=1:把第一张移到最后一张;
a=2:把最后一张移到第一张;
a=3:把前2张牌交换;
a=4:输出第b牌的数字。
输入
第一行输入N和M,表示牌数以及操作数量,接下来M行,每行两个整数a和b描述操作方式。
输出
对于每个a=4的操作输出第b张牌上的数字。
也是模拟,分别记录头和尾的位置,然后模拟就可以了,注意数组一定要够大
var a:array[-1000000..1000000] of longint; i,j,k,n,m,s,x,y,l,r,t:longint; begin assign(input,'j2.in'); reset(input); assign(output,'j2.out');rewrite(output); readln(n,m); l:=0; r:=0+n-1; for i:=0 to n+0-1 do a[i]:=i-(-1); for i:=1 to m do begin readln(x,y); if x=4 then begin writeln(a[y+l-1]); end else begin for j:=1 to y do begin if x=1 then begin r:=r+1; a[r]:=a[l]; a[l]:=0; inc(l); end else if x=2 then begin dec(l); a[l]:=a[r]; a[r]:=0; dec(r); end else if x=3 then begin t:=a[l]; a[l]:=a[l+1]; a[l+1]:=t; end; end; end; end; end.
]]>
Comments NOTHING