题目描述
FJ的奶牛喜欢探索农场周围的地形。一开始,所有N(1<=N<=1,000,000,000)只奶牛一起出发,但当碰到路口时,这一群牛可能会分成两部分(不能为空),每一部分都继续前进,当碰到另一个路口时,再分成两部分,如此反复下去。。。
-假设路上到处都是新的岔口,计算最终被分成多少支队伍。
输入
第1行: 两个用空格隔开的整数:N,K
输出
第1行: 输出一个整数表示最终的队伍数。
二分,分别判断奇数和偶数的情况,如果当前数和m不是同一类型的(奇数或偶数)就加一然后退出;
程序
var
i,j,k,n,m,s:longint;
procedure dfs(l,r,x:longint);
var
i,j,k:longint;
begin
if (x<=m+1) or (x mod 2<>m mod 2)
then begin
inc(s);
exit;
end;
if (x mod 2)=0 then
begin
i:=x div 2-m div 2;
j:=x div 2+m div 2;
end
else
begin
i:=x div 2-m div 2;
j:=x-i;
end;
if i+j<>x then begin inc(s); exit; end;
dfs(l,i,i);
dfs(j,r,j);
end;
begin
readln(n,m);
dfs(1,n,n);
writeln(s);
end.
]]>

Comments NOTHING