Informatika gyűjtemény

Egy szinttel feljebb fg_kem.pas

2004050607080910

NézetNyomtat

fg_kem.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+}
{$M 65520,0,655360} {fontos, hogy a stack eleg nagy legyen}
PROGRAM kemence;
CONST
    ch = '5';
    inputFile = 'KEMENCE'+ch+'.BE';
    outputFile = 'KEMENCE'+ch+'.KIX';
    maxn = 10000;

VAR
    N, K: INTEGER;
    list: ARRAY [1..maxn] OF RECORD
        E: BYTE;
        S: INTEGER; {*}
    END;

    choice: ARRAY [1..maxn] OF INTEGER;

PROCEDURE Load;
VAR
    T: Text;
    i: INTEGER;
BEGIN
    Assign(T, inputFile);
    Reset(T);
    ReadLn(T, N, K);
    FOR i:= 1 TO N DO
    BEGIN
        ReadLn(T, list[i].S, list[i].e); {*}
    END;
    Close(T);
END; {Load}

PROCEDURE dummy_eljaras; {ez az eljaras csak a memoria-helyfoglalashoz kell}
VAR
    cache: ARRAY [1..maxn+1] OF LONGINT;


FUNCTION Best(elso_targy: INTEGER): LONGINT;
VAR
    i: INTEGER;
    max: LONGINT; {a berakott targyak e. ideje}
    ido: LONGINT; {max + a maradek targyak e. ideje}
    tmp: INTEGER;
    s: INTEGER; {*} {a kemencebe kerulo targyak sulya}
BEGIN
    cache[elso_targy]:= -1;
    max:= 0; s:= 0; {*}
    tmp:= elso_targy+K-1;
    IF tmp > N THEN tmp:= N;
    FOR i:= elso_targy TO tmp DO
    BEGIN
        s:= s+list[i].s; {*} {a kemencebe kerulo targyak sulya...}
        IF > K THEN BREAK; {*}
        IF list[i].> max THEN max:= list[i].e; {...es egetesi edeje}
        ido:= max + cache[i+1];
        IF (cache[elso_targy] = -1) OR (ido < cache[elso_targy]) THEN
        BEGIN
            cache[elso_targy]:= ido;
            choice[elso_targy]:= i-elso_targy+1;
        END;
    END;
    Best:= cache[elso_targy];
END; {Best}

PROCEDURE Process;
VAR
    T: Text;
    i: INTEGER;
BEGIN
    Assign(T, outputFile);
    Rewrite(T);
    cache[N+1]:= 0;
    FOR i:= N DOWNTO 1 DO Best(i);
    WriteLn(T, cache[1]);
    i:= 1;
    WHILE i <= N DO
    BEGIN
        WriteLn(T, i, ' ', i+choice[i]-1);
        i:= i+choice[i];
    END;
    Close(T);
END; {Process}

BEGIN
    Load;
    Process;

END; {dummy_eljaras}

BEGIN
    dummy_eljaras;
END.
(Vissza)