⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p165.dpr

📁 zhy关于acm.sgu.ru的OJ上题目的参考程序。 包含了里面大部分的题目
💻 DPR
字号:
{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
{$R+,Q+,S+}
Const
    InFile     = 'p165.in';
    OutFile    = 'p165.out';
    Limit      = 6001;
    C          = 5000;

Type
    Tdata      = record
                     total    : integer;
                     data     : array[1..Limit] of
                                  record
                                      number , position     : integer;
                                  end;
                 end;
    Tanswer    = array[1..Limit] of integer;

Var
    nagetive ,
    positive   : Tdata;
    answer     : Tanswer;

procedure init;
var
    i , tmp , N: integer;
    num        : extended;
begin
    fillchar(nagetive , sizeof(nagetive) , 0);
    fillchar(positive , sizeof(positive) , 0);
//    assign(INPUT , InFile); ReSet(INPUT);
      read(N);
      for i := 1 to N do
        begin
            read(num);
            tmp := round(num * 1e6) - 2000000;
            if tmp < 0 then
              begin
                  inc(nagetive.total);
                  nagetive.data[nagetive.total].number := tmp;
                  nagetive.data[nagetive.total].position := i;
              end
            else
              begin
                  inc(positive.total);
                  positive.data[positive.total].number := tmp;
                  positive.data[positive.total].position := i;
              end;
        end;
//    Close(INPUT);
    nagetive.data[nagetive.total + 1].number := -2 * C - 1;
    positive.data[positive.total + 1].number := 2 * C + 1;
end;

procedure work;
var
    i , now ,
    p1 , p2    : integer;
begin
    now := 0;
    p1 := 1; p2 := 1;
    for i := 1 to nagetive.total + positive.total do
      if now + positive.data[p1].number <= C then
        begin
            answer[i] := positive.data[p1].position;
            inc(now , positive.data[p1].number);
            inc(p1);
        end
      else
        begin
            answer[i] := nagetive.data[p2].position;
            inc(now , nagetive.data[p2].number);
            inc(p2);
        end;
end;

procedure out;
var
    i          : integer;
begin
//    assign(OUTPUT , OutFile); ReWrite(OUTPUT);
      writeln('yes');
      for i := 1 to positive.total + nagetive.total - 1 do
        write(answer[i] , ' ');
      if positive.total + nagetive.total > 0 then
        writeln(answer[positive.total + nagetive.total])
      else
        writeln;
//    Close(OUTPUT);
end;

Begin
    init;
    work;
    out;
End.

⌨️ 快捷键说明

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