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

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

Показать ответ
Ответ:
freks2
freks2
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-бота