В некотором королевстве есть N провинций. Король пожелал объединить все их под своей самодержавной властью. Естественно, чтобы никто не догадался об этих планах, он будет это делать поэтапно, а именно: раз в год он будет объединять какие-то две провинции в одну. Чтобы жителям обеих провинций не было обидно, новому территориальному образованию будет присвоено новое название, которое будет отличаться от обоих старых названий. Естественно, это потребует выпуска новых паспортов для жителей обеих провинций. Очевидно, что если в первой провинции p_{i} жителей, а во второй – p_{j} жителей, то для них надо выпустить p_{i} +p_{j} новых паспортов.

На следующий год король объединяет еще какие-то две провинции. И так далее, до тех пор пока вся территория королевства не будет объединена в одну большую «провинцию». Определите, какое наименьшее количество новых паспортов придется выпустить, если король будет объединять провинции оптимально с этой точки зрения.

Формат ввода
В первой строке вводится число N (натуральное, не превышает 10^{5}) – количество провинций. Затем вводится N чисел – количество жителей каждой провинции (натуральное, не превосходит 10^{9}). Гарантируется, что изначально в королевстве хотя бы две провинции.

Формат вывода
Выведите единственное число – количество новых паспортов, которые придется выпустить.

Пример 1
Ввод
2
2 6
Вывод
8
Пример 2
Ввод
3
6 2 4
Вывод
18

Siyara1 Siyara1    1   17.10.2020 07:31    131

Ответы
seslermarina200 seslermarina200  16.11.2020 07:31

var

       n, i, j, h: Word;

       p: Int64;

       a: array [1..10000] of Int64;

begin

       Read (n);

       p := 0;

       for i := 1 to n do

               Read (a[i]);

       

       for i := 1 to n - 1 do

               for j := i + 1 to n do begin

                       if a[i] > a[j] then begin

                               h := a[i];

                               a[i] := a[j];

                               a[j] := h

                       end;

               end;

               

       for i := 1 to n do begin

               p := p + a[i] + a[i + 1];

               a[i + 1] := p

       end;

       Write (a[i]);

end.        

Пояснение:

1) записываем в массив кол-во жителей в каждой провинции

2) сортируем этот массив "пузырьковым" методом, от меньшего к большему (ну хотя можно и рекурсией)

3) Выполняем условие задачи, считаем кол-во паспортов

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика