如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。

URAL/1064

来自"NOCOW"

跳转到: 导航, 搜索

因为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.
个人工具