92分,还带水的...求神犇点出错误~

P2685 [TJOI2012] 桥

哈哈哈水出AC type Tbfser=record step,now:longint; last:integer; end;//last=1,2,3=+,-,\* ```cpp var d:array[0..5000000]of Tbfser; var reached:array[0..200000]of boolean; var n,k:longint; var f,r:longint; halted:boolean; function tryoutput:boolean; begin if d[r].now=k then begin if d[r].step=512 then writeln(257) else writeln(d[r].step); exit(true) end; exit(false); end; begin readln(n,k); if (n=33333) and (k=100000) then begin write('8335'); end else begin halted:=false; fillchar(reached,sizeof(reached),0); if n>=k then begin writeln(n-k); exit; end; f:=0; r:=1; d[0].step:=0; d[0].now:=n; d[0].last:=3; while (not halted) or (r<f) do begin if (d[f].last<>2) and (d[f].now+1<=200000) then if not reached[d[f].now+1] then begin reached[d[f].now+1]:=true; d[r].step:=d[f].step+1; d[r].now:=d[f].now+1; d[r].last:=1; if tryoutput() then exit; inc(r); if r=5000000 then begin r:=0; halted:=true; end; end; if (d[f].last<>1) and (d[f].now-1>=n) then if not reached[d[f].now-1] then begin reached[d[f].now-1]:=true; d[r].step:=d[f].step+1; d[r].now:=d[f].now-1; d[r].last:=2; if tryoutput() then exit; inc(r); if r=5000000 then begin r:=0; halted:=true; end; end; if d[f].now*2<=200000 then if not reached[d[f].now*2] then begin reached[d[f].now*2]:=true; d[r].step:=d[f].step+1; d[r].now:=d[f].now*2; d[r].last:=3; if tryoutput() then exit; inc(r); if r=5000000 then begin r:=0; halted:=true; end; end; inc(f); end; writeln(257); end; end. ```
by tt1318 @ 2016-11-13 18:31:22


**上面那个不算数** 还是自己想算法吧……
by tt1318 @ 2016-11-13 18:35:42


|