CAR - Lập lịch sửa chữa ô tô
Tác giả: ll931110
Ngôn ngữ: Pascal
{$MODE DELPHI}
const
InputFile = '';
OutputFile = '';
max = 10000;
var
a, b, Index: array[1..max] of Integer;
n: Integer;
Res: Comp;
procedure Enter;
var
f: Text;
i: Integer;
begin
Assign(f, InputFile); Reset(f);
Readln(f, n);
for i := 1 to n do Read(f, a[i]);
Readln(f);
for i := 1 to n do Read(f, b[i]);
Close(f);
end;
procedure Init;
var
i: Integer;
begin
for i := 1 to n do Index[i] := i;
end;
function Lower(i, j: Integer): Boolean; {= a[i]/b[i] > a[j]/b[j]}
begin
Lower := LongInt(a[i]) * b[j] > LongInt(a[j]) * b[i];
end;
procedure QSort(L, H: Integer);
var
k, i, j, t: Integer;
begin
if L >= H then Exit;
k := Index[Random(H - L + 1) + L];
i := L; j := H;
repeat
while Lower(Index[i], k) do Inc(i);
while Lower(k, Index[j]) do Dec(j);
if i <= j then
begin
t := Index[i]; Index[i] := Index[j]; Index[j] := t;
Inc(i); Dec(j);
end;
until i > j;
QSort(L, j); QSort(i, H);
end;
procedure Solve;
var
t: LongInt;
i, j: Integer;
begin
t := 0; Res := 0;
for i := 1 to n do
begin
j := Index[i];
t := t + b[j];
Res := Res + a[j] * (t + 0.0);
end;
end;
procedure Result;
var
f: Text;
i: Integer;
begin
Assign(f, OutputFile); Rewrite(f);
Writeln(f, Res:0:0);
for i := 1 to n do Write(f, Index[i], ' ');
Close(f);
end;
begin
Enter;
Init;
QSort(1, n);
Solve;
Result;
end.
2
1 1
1 2