哈哈哈水出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