129 条题解

  • 0
    @ 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

    做出完全解~ 好快

  • 0
    @ 2006-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

    改个数组就全过了

  • 0
    @ 2006-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

    无奈!!!!!!!!!!!!!!!!!!!!!!!!!!

  • 0
    @ 2006-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

    朴素广搜

  • 0
    @ 2006-05-25 19:42:45

    搜索加了个A*函数才过

    还有数据没有无解的情况

  • 0
    @ 2006-05-04 14:25:47

    这什么意思饿?。。。

  • 0
    @ 2006-02-19 13:12:07

    双向宽搜应该可以。。。

  • -1
    @ 2017-07-10 08:07:19
  • -1
    @ 2017-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.
    

信息

ID
1029
难度
6
分类
搜索 | 搜索与剪枝 点击显示
标签
递交数
2570
已通过
628
通过率
24%
被复制
16
上传者