如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。
URAL/1064
来自"NOCOW"
< URAL
因为n的范围是[0,10000].
那么直接枚举n再合并区间即可.
var left,right,x,n,l,k,i,t:longint; a,b:array[0..10000]of longint; bo:array[0..10000]of boolean; begin readln(n,l); for i:=1 to 10000 do begin t:=0; right:=i-1; left:=0; repeat x:=(left+right)div 2; inc(t); if t>l then break; if (x=n)and(t=l) then bo[i]:=true; if x>n then right:=x-1 else left:=x+1; until right<left; end; for i:=1 to 10000 do begin if (bo[i])and(not bo[i-1]) then begin inc(k); a[k]:=i; b[k]:=i; end; if bo[i] and bo[i-1] then b[k]:=i; end; writeln(k); for i:=1 to k do writeln(a[i],' ',b[i]); end.