Задача А. Фиксики и паровой двигатель.
Будем решать задачу, если кол-во положительных чисел чётно и кол-во отрицательных чисел чётно (иначе объединим в пару максимальное отрицательное число и минимальное положительное число). Решим для положительных, для отрицательных будет аналогично. Пусть $$$pos$$$ — отсортированный по возрастанию массив положительных чисел. Тогда будем брать в пары числа $$$pos_{2 \cdot i - 1}$$$ и $$$pos_{2 \cdot i}$$$ для $$$i = 1...\frac{n}{2}$$$. Почему нам выгодно брать именно так?
Пусть у нас есть числа $$$a \le b \le c \le d$$$, нужно доказать, что
$$$a \cdot b + c \cdot d \ge a \cdot c + b \cdot d$$$
$$$a \cdot b + c \cdot d \ge a \cdot d + b \cdot c$$$
$$$a \le d$$$
$$$a \cdot \left(b - c \right) \ge d \cdot \left(b - c \right)$$$
$$$a \cdot b + c \cdot d \ge a \cdot c + b \cdot d$$$
$$$a \le c$$$
$$$a \cdot \left(b - d \right) \ge c \cdot \left(b - d \right)$$$
$$$a \cdot b + c \cdot d \ge a \cdot d + b \cdot c$$$
Заметим, что для решения нам достаточно было отсортировать по возрастанию массив $$$a$$$ и брать в пары числа $$$a_{2 \cdot i - 1}$$$ и $$$a_{2 \cdot i}.$$$
#include <bits/stdc++.h>
#define all(array) array.begin(), array.end()
using ll = long long;
using namespace std;
void solve() {
ll n;
cin >> n;
vector<ll> a(n);
for (ll i = 0; i < n; ++i) {
cin >> a[i];
}
sort(all(a));
ll ans = 0;
for (ll i = 0; i < n; i += 2) {
ans += a[i] * a[i + 1];
}
cout << ans;
}
int main() {
solve();
}




