| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
代码3600b...及其混乱,张贴示众听着庐州月...
自己都不知道怎么写成这样的,还一A了.
type
rec=record
c,l:integer;
end;
var
col:array[0..25,0..25]of integer;
p:array[0..25]of rec;
s:string;
a,b,i,j,k,n:longint;
op1,op2:string;
procedure renew;
begin
fillchar(col,sizeof(col),0);
end;
procedure monto(a,b:longint);
var
i,tmp:integer;
begin
if (a=b)or(p[a].c=p[b].c) then exit;
for i:=p[a].l+1 to col[p[a].c,0] do
begin
tmp:=col[p[a].c,i];
dec(col[p[a].c,0]);
inc(col[tmp,0]);
col[tmp,col[tmp,0]]:=tmp;
p[tmp].c:=tmp;p[tmp].l:=col[tmp,0];
end;
for i:=p[b].l+1 to col[p[b].c,0] do
begin
tmp:=col[p[b].c,i];
dec(col[p[b].c,0]);
inc(col[tmp,0]);
col[tmp,col[tmp,0]]:=tmp;
p[tmp].c:=tmp;p[tmp].l:=col[tmp,0];
end;
inc(col[p[b].c,0]);
col[p[b].c,col[p[b].c,0]]:=a;
dec(col[p[a].c,0]);
p[a].c:=p[b].c;
p[a].l:=p[b].l+1;
end;
procedure mover(a,b:longint);
var
i,tmp:integer;
begin
if (a=b)or(p[a].c=p[b].c) then exit;
for i:=p[a].l+1 to col[p[a].c,0] do
begin
tmp:=col[p[a].c,i];
dec(col[p[a].c,0]);
inc(col[tmp,0]);
col[tmp,col[tmp,0]]:=tmp;
p[tmp].c:=tmp;p[tmp].l:=col[tmp,0];
end;
inc(col[p[b].c,0]);
col[p[b].c,col[p[b].c,0]]:=a;
dec(col[p[a].c,0]);
p[a].c:=p[b].c;
p[a].l:=col[p[b].c,0];
end;
procedure ponto(a,b:longint);
var
i,tmp,de,ac,al:integer;
begin
if (a=b)or(p[a].c=p[b].c) then exit;
de:=0;
for i:=p[b].l+1 to col[p[b].c,0] do
begin
tmp:=col[p[b].c,i];
dec(col[p[b].c,0]);
inc(col[tmp,0]);
col[tmp,col[tmp,0]]:=tmp;
p[tmp].c:=tmp;p[tmp].l:=col[tmp,0];
end;
ac:=p[a].c;al:=p[a].l;
for i:=al to col[ac,0] do
begin
tmp:=col[ac,i];
inc(de);
inc(col[p[b].c,0]);
col[p[b].c,col[p[b].c,0]]:=tmp;
p[tmp].c:=p[b].c;p[tmp].l:=col[p[b].c,0];
end;
dec(col[ac,0],de);
end;
procedure pover(a,b:longint);
var
i,tmp,de,ac,al:integer;
begin
if (a=b)or(p[a].c=p[b].c) then exit;
de:=0;
ac:=p[a].c;
al:=p[a].l;
for i:=al to col[ac,0] do
begin
tmp:=col[ac,i];
inc(de);
inc(col[p[b].c,0]);
col[p[b].c,col[p[b].c,0]]:=tmp;
p[tmp].c:=p[b].c;p[tmp].l:=col[p[b].c,0];
end;
dec(col[ac,0],de);
end;
procedure init_dawn;
var
tmp:string;
tp,i:integer;
begin
readln(n);
for i:=0 to n-1 do
begin
inc(col[i,0]);col[i,1]:=i;
p[i].c:=i;p[i].l:=1;
end;
repeat
readln(s);
if s='quit' then break;
op1:=copy(s,1,4);
delete(s,1,5);
tp:=pos(' ',s);
val(copy(s,1,tp-1),a);
delete(s,1,tp);
op2:=copy(s,1,4);
delete(s,1,5);
val(s,b);
if op1='move' then
if op2='onto' then monto(a,b)
else if op2='over' then mover(a,b);
if op1='pile' then
if op2='onto' then ponto(a,b)
else if op2='over' then pover(a,b);
until s='quit';
end;
procedure print;
var
i,j:longint;
begin
for i:=0 to n-1 do
begin
write(i,': ');
for j:=1 to col[i,0] do write(col[i,j],' ');
writeln;
end;
end;
begin
//assign(input,'1.txt');
//assign(output,'2.txt');
//reset(input);rewrite(output);
repeat
renew;
init_dawn;
print;
until seekeof;
//close(input);close(output);
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator