比赛 20101105 评测结果 AAAAAAAAAA
题目名称 倒水 最终得分 100
用户昵称 Achilles 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2010-11-05 21:25:51
显示代码纯文本
program watera;
var
  n,nt,k,i,j,k2,a,t,ans:longint;
  sz:array[0..1000]of longint;
begin
  assign(input,'watera.in');
  assign(output,'watera.out');
  reset(input);
  rewrite(output);
  readln(n,k);
  nt:=n;
  fillchar(sz,sizeof(sz),0);
  a:=0;
  while n<>0 do
  begin
    sz[0]:=sz[0]+1;
    sz[sz[0]]:=n mod 2;
    n:=n div 2;
    if sz[sz[0]]=1 then a:=a+1;
  end;
  if a>k then begin
    t:=0;
    for i:=sz[0] downto 1 do
      if sz[i]=1 then begin
        t:=t+1;
        if t=k then begin
          for j:=i+1 to sz[0]+1 do
            if sz[j]=0 then begin
              sz[j]:=1;
              for k2:=j-1 downto 1 do
                sz[k2]:=0;
              break;
            end;
          break;
        end;
      end;
  end;
  ans:=0;
  if sz[sz[0]+1]=1 then sz[0]:=sz[0]+1;
  for i:=1 to sz[0] do
    if sz[i]=1 then ans:=ans+(1 shl (i-1));
  writeln(ans-nt);
  close(input);
  close(output);
end.