Большая политика
В некотором королевстве есть N провинций. Король пожелал объединить их все под своей самодержавной властью. Естественно, чтобы никто не догадался об этих планах, он будет это делать поэтапно, а именно: раз в год он будет объединять какие-то две провинции в одну. Чтобы жителям обеих провинций не было обидно, новому территориальному образованию будет присвоено новое название, которое будет отличаться от обоих старых названий. Естественно, это потребует выпуска новых паспортов для жителей обеих провинций.

Очевидно, что если в первой провинции pi жителей, а во второй — pj жителей, то для них надо выпустить pi+pj новых паспортов.

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

Входные данные

В первой строке вводится число N (натуральное, не превышает 105) — количество провинций. Затем вводятся N чисел — количество жителей каждой провинции (натуральное, не превосходит 109). Гарантируется, что изначально в королевстве хотя бы две провинции.

Выходные данные

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

Примеры
Ввод
2
2 6
Вывод
8
Ввод
3
6 2 4
Вывод
18
Решать на C++!


Аноним: сразу бы написал что на c++

Ответы

Ответ дал: fkid2006
0

Ответ:

#include <iostream>

#include <set>

 

typedef long long ll;

 

int main()

{

   std::multiset<ll> st;

 

   {

       int n;

       ll population;

       std::cin >> n;

       for(int i = 0; i < n; ++i)

       {

           std::cin >> population;

           st.insert(population);

       }

   }

 

   ll result = 0;

   while(st.size() > 1)

   {

       ll a = *st.begin();

       ll b = *(++st.begin());

       st.erase(st.begin());

       st.erase(st.begin());

 

       a += b;

       result += a;

       st.insert(a);

   }

 

   std::cout << result;

 

   return 0;

}

Объяснение:

Решил не я!


Аноним: Решил не он, как еще не нашлось модератора который бы удалил ответ??
Вас заинтересует