program tvaruzky; const max_tvaruzku=1000; const max_stroju=100; type t_stroj=record stroj:integer; cas:longint; end; var tvaruzku,stroju_lis,stroju_bal:integer; rychlost_lis: array[1..max_stroju] of longint; rychlost_bal: array[1..max_stroju] of longint; cas_lis: array[1..max_tvaruzku] of longint; cas_bal: array[1..max_tvaruzku] of longint; cas:longint; {Proměnné pro implementaci haldy} halda:array[0..max_stroju-1] of t_stroj; vhalde:integer; procedure init_halda; {Initializuje datovou strukturu} begin vhalde:=0 end; function min_halda:t_stroj; {Vrátí a vyjme z haldy její nejmenší prvek} var i,j:integer; ts:t_stroj; begin if vhalde=0 then halt(1); min_halda:=halda[0]; dec(vhalde); halda[0]:=halda[vhalde]; j:=0; repeat i:=j; if (2*ihalda[2*i].cas) then j:=2*i; if (2*i+1halda[2*i+1].cas) then j:=2*i+1; ts:=halda[i]; halda[i]:=halda[j]; halda[j]:=ts until i=j end; procedure vloz_halda(co:t_stroj); {Vloží do haldy další prvek} var i:integer; ts:t_stroj; begin halda[vhalde]:=co; i:=vhalde; inc(vhalde); while (i>0) and (halda[(i-1) div 2].cas>halda[i].cas) do begin ts:=halda[(i-1) div 2]; halda[(i-1) div 2]:=halda[i]; halda[i]:=ts; i:=(i-1) div 2; end; end; var i:integer; ts:t_stroj; begin {Načtení vstupních dat} readln(tvaruzku,stroju_lis,stroju_bal); for i:=1 to stroju_lis do read(rychlost_lis[i]); for i:=1 to stroju_bal do read(rychlost_bal[i]); {Spočítání časů l_i a b_i} init_halda; for i:=1 to stroju_lis do begin ts.stroj:=i; ts.cas:=rychlost_lis[i]; vloz_halda(ts); end; for i:=1 to tvaruzku do begin ts:=min_halda; cas_lis[i]:=ts.cas; ts.cas:=ts.cas+rychlost_lis[ts.stroj]; vloz_halda(ts); end; init_halda; for i:=1 to stroju_bal do begin ts.stroj:=i; ts.cas:=rychlost_bal[i]; vloz_halda(ts); end; for i:=1 to tvaruzku do begin ts:=min_halda; cas_bal[i]:=ts.cas; ts.cas:=ts.cas+rychlost_bal[ts.stroj]; vloz_halda(ts); end; {Výpočet celkového času} cas:=0; for i:=1 to tvaruzku do if cas