| ||||||||||
| 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 | |||||||||
没有A掉的人要注意,不一定光标移到的位置才能做up或down操作,swap6也可以对第6位做思路:把up和down操作分离出来,无视left操作。。。
想不出来看程序。。
const dd:array[1..5] of longint=(120,24,6,2,1);
type node=array[0..8] of longint;
var
lis:array[0..30000] of node;
hash:array[0..1000,0..10] of boolean;
a1,b1,tmp,d:node;
ans,q1,q2,i,p:longint;
procedure init();
var i:longint;
s,s1:string;
begin
readln(s1);
s:=copy(s1,1,6);
for i:=1 to 6 do a1[i]:=ord(s[i])-48;
s:=copy(s1,8,6);
for i:=1 to 6 do b1[i]:=ord(s[i])-48;
ans:=maxlongint;
end;
procedure work();
procedure swap(var a,b:longint);
var t:longint;begin t:=a;a:=b;b:=t;end;
function get_hash(a:node):longint;
var i,j,e:longint;
begin
e:=0;
for i:=1 to 6 do d[i]:=i;
for i:=1 to 5 do begin
inc(e,(d[a[i]]-1)*dd[i]);
for j:=a[i] to 6 do dec(d[j]);
end;
exit(e);
end;
procedure new_node(a:node);
var e:longint;
begin
e:=get_hash(a);
if hash[e][a[7]] then exit
else hash[e][a[7]]:=true;
inc(q2);
move(a,lis[q2],sizeof(a));
end;
procedure try_answer(a:node);
var i,e:longint;
begin
e:=a[0];
for i:=1 to 6 do //a[8]是有没有swap6过的标示
if (not((i=6)and(a[8]=1)))and(i>a[7])and(a1[a[i]]<>b1[i]) then exit
else inc(e,abs(a1[a[i]]-b1[i]));
if e<ans then ans:=e;
end;
begin
q1:=1;q2:=0;
for i:=1 to 6 do lis[1][i]:=i;lis[1][7]:=1;
new_node(lis[1]);
try_answer(lis[0]);
while q1<=q2 do begin
inc(lis[q1][0]);
move(lis[q1],tmp,sizeof(tmp));
p:=tmp[7];
if p>1 then begin
swap(tmp[1],tmp[p]);
new_node(tmp);
try_answer(tmp);
end;
move(lis[q1],tmp,sizeof(tmp));
if p<6 then begin
swap(tmp[6],tmp[p]);
tmp[8]:=1;
new_node(tmp);
try_answer(tmp);
end;
move(lis[q1],tmp,sizeof(tmp));
if p<6 then begin
inc(tmp[7]);
new_node(tmp);
try_answer(tmp);
end;
dec(lis[q1][0]);
inc(q1);
end;
end;
procedure print();
begin
writeln(ans);
end;
begin
init();
work();
print();
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator