p2054.pas

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 62 行

PAS
62
字号
PROGRAM p2050;

TYPE
        TReach  = array[0..10001] of Boolean;

VAR
        part , p                : Longint;
        goal , L                : Longint;
        Reach                   : TReach;

PROCEDURE main;
var
        i , total               : Longint;
        p , q , c , mid         : Longint;
begin

Reach [0] := false;
total := 0;

for i := 1 to 10000 do
        begin
        p := 0;
        q := i - 1;
        c := 0;
        Reach [i] := false;
        while ( p <= q ) and ( c <= L ) do
                begin
                mid := ( p + q ) div 2;
                inc ( c );
                if mid = goal then
                        begin
                        Reach [i] := ( c = L );
                        p := q + 1;
                        end;
                if ( goal < mid ) then q := mid - 1
                        else p := mid + 1;
                end;
        if not Reach [i - 1] and Reach [i] then inc ( total );
        end;

writeln ( total );
Reach [10001] := false;
if total = 0 then exit;
for i := 1 to 10001 do
        if not Reach [i - 1] and Reach [i] then
                begin
                write ( i , ' ');
                end else
        if Reach [i - 1] and not Reach [i] then
                writeln ( i - 1 );
end;

BEGIN
readln ( part );
for p := 1 to part do
        begin
        readln ( goal , L );
        main;
        if p < part then writeln;
        end;
END.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?