p1117.dpr

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

DPR
88
字号
program p1117;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
        node    = record
                name    : Char;
                num     : Longint;
                Used    : Boolean;
                end;

var
        len     : Longint;
        data    : array[1..100] of node;
        s       : String;

procedure insert ( c : Char );
var     i       : Longint;
begin
        for i := 1 to len do
                if data [i].name = c then
                        begin
                        inc ( data [i].num );
                        exit;
                        end;
        inc ( len );
        data [len].name := c;
        data [len].num := 1;
        data [len].Used := false;
end;

procedure GetMin ( var v , s : Longint );
var     i       : Longint;
begin
        v := maxLongint;
        for i := 1 to len do
                if not data [i].Used and ( data [i].num < v ) then
                        begin
                        v := data [i].num;
                        s := i;
                        end;
end;

procedure work;
var
        i       : Longint;
        min1    : Longint;
        min2    : Longint;
        f1      : Longint;
        f2      : Longint;
        Total   : Longint;
begin
        len := 0;
        for i := 1 to length ( s ) do
                insert ( s [i] );
        
        Total := 0;
        for i := 1 to len - 1 do
                begin
                GetMin ( min1 , f1 );
                data [f1].Used := true;
                GetMin ( min2 , f2 );
                inc ( data [f2].num , data [f1].num );
                inc ( Total , data [f2].num );
                end;
        if len = 1 then Total := data [1].num;
        writeln ( length ( s ) * 8 , ' ' , Total , ' ' , length ( s ) * 8 / Total : 0 : 1 );
end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
        assign ( input , 'p.in' );
        reset ( input );
        assign ( output , 'p.out' );
        rewrite ( output );
        
        while true do
                begin
                readln ( s );
                if s = 'END' then break;
                work;
                end;

end.

⌨️ 快捷键说明

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