import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
static int[] input = {1,2,3,4,5,-6,7,8,9,10,200,-1000,100,250,-720,1080,200,300,400,500,50,74};
public static void main
(String[] args
) { int[] two = new int[input.length/2];
int[] one = new int[input.length - two.length];
int totalSum = 0;
for(int i=0;i<input.length;i++){
totalSum += input[i];
if(i<one.length)
one[i] = input[i];
else
two[i-one.length] = input[i];
}
float goal = totalSum / 2f;
boolean swapped;
do{
swapped = false;
for(int j=0;j<one.length;j++){
int curSum = sum(one);
float curBestDiff
= Math.
abs(goal
- curSum
); int curBestIndex = -1;
for(int i=0;i<two.length;i++){
int testSum = curSum - one[j] + two[i];
float diff
= Math.
abs(goal
- testSum
); if(diff < curBestDiff){
curBestDiff = diff;
curBestIndex = i;
}
}
if(curBestIndex >= 0){
swapped = true;
System.
out.
println("swapping " + one
[j
] + " and " + two
[curBestIndex
]); int tmp = one[j];
one[j] = two[curBestIndex];
two[curBestIndex] = tmp;
}
}
} while(swapped);
System.
out.
println("diff = " + Math.
abs(sum
(one
) - sum
(two
))); }
static int sum(int[] list){
int sum = 0;
for(int i=0;i<list.length;i++)
sum += list[i];
return sum;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewoJc3RhdGljIGludFtdIGlucHV0ID0gezEsMiwzLDQsNSwtNiw3LDgsOSwxMCwyMDAsLTEwMDAsMTAwLDI1MCwtNzIwLDEwODAsMjAwLDMwMCw0MDAsNTAwLDUwLDc0fTsKCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewkKCQlpbnRbXSB0d28gPSBuZXcgaW50W2lucHV0Lmxlbmd0aC8yXTsKCQlpbnRbXSBvbmUgPSBuZXcgaW50W2lucHV0Lmxlbmd0aCAtIHR3by5sZW5ndGhdOwoJCQkJCgkJaW50IHRvdGFsU3VtID0gMDsKCQlmb3IoaW50IGk9MDtpPGlucHV0Lmxlbmd0aDtpKyspewoJCQl0b3RhbFN1bSArPSBpbnB1dFtpXTsKCQkJaWYoaTxvbmUubGVuZ3RoKQoJCQkJb25lW2ldID0gaW5wdXRbaV07CgkJCWVsc2UKCQkJCXR3b1tpLW9uZS5sZW5ndGhdID0gaW5wdXRbaV07CgkJfQoJCQoJCWZsb2F0IGdvYWwgPSB0b3RhbFN1bSAvIDJmOyAKCQkKCQlib29sZWFuIHN3YXBwZWQ7CgkJZG97CgkJCXN3YXBwZWQgPSBmYWxzZTsKCQkJZm9yKGludCBqPTA7ajxvbmUubGVuZ3RoO2orKyl7CgkJCQlpbnQgY3VyU3VtID0gc3VtKG9uZSk7CgkJCQlmbG9hdCBjdXJCZXN0RGlmZiA9IE1hdGguYWJzKGdvYWwgLSBjdXJTdW0pOwoJCQkJaW50IGN1ckJlc3RJbmRleCA9IC0xOwoJCQkJCgkJCQlmb3IoaW50IGk9MDtpPHR3by5sZW5ndGg7aSsrKXsKCQkJCQlpbnQgdGVzdFN1bSA9IGN1clN1bSAtIG9uZVtqXSArIHR3b1tpXTsKCQkJCQlmbG9hdCBkaWZmID0gTWF0aC5hYnMoZ29hbCAtIHRlc3RTdW0pOwoJCQkJCWlmKGRpZmYgPCBjdXJCZXN0RGlmZil7CgkJCQkJCWN1ckJlc3REaWZmID0gZGlmZjsKCQkJCQkJY3VyQmVzdEluZGV4ID0gaTsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCWlmKGN1ckJlc3RJbmRleCA+PSAwKXsJCgkJCQkJc3dhcHBlZCA9IHRydWU7CgkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJzd2FwcGluZyAiICsgb25lW2pdICsgIiBhbmQgIiArIHR3b1tjdXJCZXN0SW5kZXhdKTsKCQkJCQlpbnQgdG1wID0gb25lW2pdOwoJCQkJCW9uZVtqXSA9IHR3b1tjdXJCZXN0SW5kZXhdOwoJCQkJCXR3b1tjdXJCZXN0SW5kZXhdID0gdG1wOwoJCQkJfQoJCQl9CgkJfSB3aGlsZShzd2FwcGVkKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKG9uZSkpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcodHdvKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJkaWZmID0gIiArIE1hdGguYWJzKHN1bShvbmUpIC0gc3VtKHR3bykpKTsKCX0KCglzdGF0aWMgaW50IHN1bShpbnRbXSBsaXN0KXsKCQlpbnQgc3VtID0gMDsKCQlmb3IoaW50IGk9MDtpPGxpc3QubGVuZ3RoO2krKykKCQkJc3VtICs9IGxpc3RbaV07CgkJcmV0dXJuIHN1bTsKCX0KfQ==
swapping 1 and 500
swapping 2 and 1
swapping 3 and 2
swapping 4 and 3
[500, 1, 2, 3, 5, -6, 7, 8, 9, 10, 200]
[-1000, 100, 250, -720, 1080, 200, 300, 400, 4, 50, 74]
diff = 1