#include <iostream>
#include <vector>
int rearrange(int (&a)[4])
{
if (a[3] < a[2]) {
std::swap(a[3], a[2]);
} // a[2] <= a[3]
if (a[1] < a[0]) {
std::swap(a[1], a[0]);
} // a[2] <= a[3] && a[0] <= a[1]
if (a[0] < a[2]) {
std::swap(a[0], a[2]);
} // a[2] <= a[3] && a[2] <= a[0] <= a[1] -> a[2] is the min
if (a[1] < a[3]) {
std::swap(a[1], a[3]);
} // a[2] <= a[3] <= a[1] && a[2] <= a[0] <= a[1] -> a[1] is the max
if (a[3] < a[0]) {
std::swap(a[3], a[0]);
} // a[2] <= a[0] <= a[3] <= a[1]
// as we know order, we might get rod of abs:
// (a[1] - a[0]) + (a[1] - a[2]) + (a[3] - a[2]);
return -a[0] + 2 * a[1] - 2 * a[2] + a[3];
}
void test(int (&a)[4])
{
std::cout << "sum = " << rearrange(a) << std::endl;
for (int e : a) {
std::cout << e << " ";
}
std::cout << std::endl;
}
int main() {
int a[] = {1, 2, 4, 8};
int b[] = {3, -1, 5, 5};
test(a);
test(b);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IHJlYXJyYW5nZShpbnQgKCZhKVs0XSkKewogICAgaWYgKGFbM10gPCBhWzJdKSB7CiAgICAgICAgc3RkOjpzd2FwKGFbM10sIGFbMl0pOwogICAgfSAvLyBhWzJdIDw9IGFbM10KICAgIGlmIChhWzFdIDwgYVswXSkgewogICAgICAgIHN0ZDo6c3dhcChhWzFdLCBhWzBdKTsKICAgIH0gLy8gYVsyXSA8PSBhWzNdICYmIGFbMF0gPD0gYVsxXQogICAgaWYgKGFbMF0gPCBhWzJdKSB7CiAgICAgICAgc3RkOjpzd2FwKGFbMF0sIGFbMl0pOwogICAgfSAvLyBhWzJdIDw9IGFbM10gJiYgYVsyXSA8PSBhWzBdIDw9IGFbMV0gLT4gYVsyXSBpcyB0aGUgbWluCiAgICBpZiAoYVsxXSA8IGFbM10pIHsKICAgICAgICBzdGQ6OnN3YXAoYVsxXSwgYVszXSk7CiAgICB9IC8vIGFbMl0gPD0gYVszXSA8PSBhWzFdICYmIGFbMl0gPD0gYVswXSA8PSBhWzFdIC0+IGFbMV0gaXMgdGhlIG1heAogICAgaWYgKGFbM10gPCBhWzBdKSB7CiAgICAgICAgc3RkOjpzd2FwKGFbM10sIGFbMF0pOwogICAgfSAvLyBhWzJdIDw9IGFbMF0gPD0gYVszXSA8PSBhWzFdCiAgICAvLyBhcyB3ZSBrbm93IG9yZGVyLCB3ZSBtaWdodCBnZXQgcm9kIG9mIGFiczoKICAgIC8vIChhWzFdIC0gYVswXSkgKyAoYVsxXSAtIGFbMl0pICsgKGFbM10gLSBhWzJdKTsKICAgIHJldHVybiAtYVswXSArIDIgKiBhWzFdIC0gMiAqIGFbMl0gKyBhWzNdOwp9Cgp2b2lkIHRlc3QoaW50ICgmYSlbNF0pCnsKCXN0ZDo6Y291dCA8PCAic3VtID0gIiA8PCByZWFycmFuZ2UoYSkgPDwgc3RkOjplbmRsOwoJZm9yIChpbnQgZSA6IGEpIHsKCQlzdGQ6OmNvdXQgPDwgZSA8PCAiICI7CQkKCX0KCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkgewoJaW50IGFbXSA9IHsxLCAyLCA0LCA4fTsKCWludCBiW10gPSB7MywgLTEsIDUsIDV9OwoJCgl0ZXN0KGEpOwoJdGVzdChiKTsKfQ==