В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
vladajoyful
vladajoyful
02.02.2022 07:31 •  Информатика

В некотором королевстве есть 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

Показать ответ
Ответ:
катя5088
катя5088
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) Выполняем условие задачи, считаем кол-во паспортов

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота