129 条题解
-
0chnlkw LV 3 @ 2006-11-01 20:34:41
编译通过...
├ 测试数据 01:答案正确... 2088ms
├ 测试数据 02:答案正确... 2088ms
├ 测试数据 03:答案正确... 2103ms
├ 测试数据 04:答案正确... 2088ms
├ 测试数据 05:答案正确... 2103ms
├ 测试数据 06:答案正确... 2088ms
├ 测试数据 07:答案正确... 2088ms
├ 测试数据 08:答案正确... 2088ms
├ 测试数据 09:答案正确... 2088ms
├ 测试数据 10:答案正确... 2103ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:20925ms做出完全解~ 好快
-
02006-10-26 20:59:22@
我先反搜出所有状态然后读入直接输出
我用它在9!个排列中的位置判重的
编译通过...
├ 测试数据 01:答案正确... 2275ms
├ 测试数据 02:答案正确... 2306ms
├ 测试数据 03:答案正确... 2322ms
├ 测试数据 04:答案正确... 2259ms
├ 测试数据 05:答案正确... 2306ms
├ 测试数据 06:答案正确... 2322ms
├ 测试数据 07:答案正确... 2306ms
├ 测试数据 08:答案正确... 2322ms
├ 测试数据 09:答案正确... 2306ms
├ 测试数据 10:答案正确... 2306ms改个数组就全过了
-
02006-10-19 10:05:43@
编译通过...
├ 测试数据 01:答案正确... 2431ms
├ 测试数据 02:答案正确... 2431ms
├ 测试数据 03:答案正确... 2525ms
├ 测试数据 04:答案正确... 2619ms
├ 测试数据 05:答案正确... 2712ms
├ 测试数据 06:答案正确... 2759ms
├ 测试数据 07:答案正确... 3056ms
├ 测试数据 08:答案正确... 3150ms
├ 测试数据 09:答案正确... 2697ms
├ 测试数据 10:答案正确... 2291ms
无奈!!!!!!!!!!!!!!!!!!!!!!!!!! -
02006-10-11 19:57:46@
编译通过...
├ 测试数据 01:答案正确... 2462ms
├ 测试数据 02:答案正确... 2400ms
├ 测试数据 03:答案正确... 2384ms
├ 测试数据 04:答案正确... 2541ms
├ 测试数据 05:答案正确... 2353ms
├ 测试数据 06:答案正确... 2650ms
├ 测试数据 07:答案正确... 3041ms
├ 测试数据 08:答案正确... 3103ms
├ 测试数据 09:答案正确... 2431ms
├ 测试数据 10:答案正确... 2166ms
朴素广搜 -
02006-05-25 19:42:45@
搜索加了个A*函数才过
还有数据没有无解的情况 -
02006-05-04 14:25:47@
这什么意思饿?。。。
-
02006-02-19 13:12:07@
双向宽搜应该可以。。。
-
-12017-07-10 08:07:19@
-
-12017-05-14 08:46:16@
状压宽搜离线查找:
可能是我状压玩的不6,这个方法事件复杂度非常高,状压每次要还原再压缩;
不知道为什么while循环中达不到h>t的情况,害我只好额外加一个t<362880
不过因此也提了一些时间效率;
最后程序都是4k大几ms过掉真的是脸白+脸白+脸白
不建议大家学我,不过貌似都是用的hash,我姑且发一个状压
dalao也可以教教我怎么压的更快function toten(二进制(string)转化为十进制(longint)) function totwo(十进制转化为二进制) function calcleft1(2)计算shu数组的剩下的数字(因为数字只是1-9) begin //for i:= 0 to 34000000 do v[i].pan:=false; w[0].num:=17531630;v[17531630].pan:=true; w[1].num:=17017548;v[17017548].pan:=true; w[2].num:=5904215;v[5904215].pan:=true; w[3].num:=9603057;v[9603057].pan:=true; w[4].num:=10004453;v[10004453].pan:=true; w[5].num:=12766929;v[12766929].pan:=true; w[6].num:=13168325;v[13168325].pan:=true; w[7].num:=5461575;v[5461575].pan:=true; t:=8; while (h<t) and (t<362880) do begin sh:=totwo(w[h].num);//writeln(h,' ',t); for i:= 1 to 25-length(sh) do sh:='0'+sh; tmps:=copy(sh,1,4); delete(sh,1,4); kong:=toten(tmps); zhi:=0; for i:= 1 to 7 do begin tmps:=copy(sh,1,3); delete(sh,1,3); inc(zhi); shu[zhi]:=toten(tmps); end; if kong<9 then begin for i:= 7 downto kong do begin shu[i+1]:=shu[i]; end; shu[kong]:=-1; for i:= 1 to 8 do shu[i]:=shu[i]+2; shu[9]:=calcleft1; end else begin shu[9]:=0; for i:= 1 to 7 do inc(shu[i]); shu[8]:=calcleft2; for i:= 1 to 9 do inc(shu[i]); end; zhi:=0; for i:= 1 to 3 do begin for j:= 1 to 3 do begin inc(zhi); map[i,j]:=shu[zhi]; end; end; for i:= 1 to 3 do begin for j:= 1 to 3 do begin if (i>1) then begin map1:=map; tmp:=map1[i,j]; map1[i,j]:=map1[i-1,j]; map1[i-1,j]:=tmp; s0:=''; for k:= 1 to 9 do begin s0:=s0+chr(48+map1[ (k-1) div 3 +1,(k-1) mod 3 +1 ]); end; for k:= 1 to 9 do begin s0[k]:=chr( ord(s0[k])-1 ); end; kong:=pos('0',s0); delete(s0,kong,1); for k:= 1 to 8 do begin s0[k]:=chr( ord(s0[k])-1 ); end; delete(s0,8,1); s1:=''; tmps:=totwo(kong); if length(tmps)<4 then begin for k:= 1 to 4-length(tmps) do tmps:='0'+tmps; end; s1:=tmps; for k:= 1 to 7 do begin tmps:=totwo( (ord(s0[k])-48) ); if (length(tmps)<3) then begin for L:= 1 to 3-length(tmps) do tmps:='0'+tmps; end; s1:=s1+tmps; end; w[t].num:=toten(s1); w[t].tm:=w[h].tm+1; if (v[w[t].num].pan=false) then begin v[w[t].num].pan:=true; v[w[t].num].loc:=w[t].tm; inc(t); end; end; if (j>1) then begin map1:=map; tmp:=map1[i,j-1]; map1[i,j-1]:=map1[i,j]; map1[i,j]:=tmp; s0:=''; for k:= 1 to 9 do begin s0:=s0+chr(48+map1[ (k-1) div 3 +1,(k-1) mod 3 +1 ]); end; for k:= 1 to 9 do begin s0[k]:=chr( ord(s0[k])-1 ); end; kong:=pos('0',s0); delete(s0,kong,1); for k:= 1 to 8 do begin s0[k]:=chr( ord(s0[k])-1 ); end; delete(s0,8,1); s1:=''; tmps:=totwo(kong); if length(tmps)<4 then begin for k:= 1 to 4-length(tmps) do tmps:='0'+tmps; end; s1:=tmps; for k:= 1 to 7 do begin tmps:=totwo( (ord(s0[k])-48) ); if (length(tmps)<3) then begin for L:= 1 to 3-length(tmps) do tmps:='0'+tmps; end; s1:=s1+tmps; end; w[t].num:=toten(s1); w[t].tm:=w[h].tm+1; if (v[w[t].num].pan=false) then begin v[w[t].num].pan:=true; v[w[t].num].loc:=w[t].tm; inc(t); end; end; end; end; inc(h); end; for i:= 1 to 50 do begin readin; end; end.