/* ID: vvatash1 PROG: numtri LANG: C++ */ using namespace std; #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include float roundf(float x) { return x >= 0.0f ? floorf(x + 0.5f) : ceilf(x - 0.5f); } int compare_ints(const void* a, const void* b) { int arg1 = *(const int*)a; int arg2 = *(const int*)b; if (arg1 > arg2) return -1; if (arg1 < arg2) return 1; return 0; } int main() { ifstream fin ("gifts.in"); ofstream fout ("gifts.out"); int number = 0; int weight[6000]={0}; int used[6000] = {0}; fin >> number; int sum = 0; for (int i = 0; i < number; i++) { fin >> weight[i]; sum += weight[i]; } int averageLength = roundf((float) sum / 2); int result = 0; qsort(weight, number, sizeof(int), compare_ints); for (int i = 0; i < number; i++) { if(result + weight[i] <= averageLength) { result +=weight[i]; used[i] = true; } } int result1 = 0; for (int i = 0; i < number; i++) { if(used[i] == false) result1 += weight[i]; } /*for (int i = 0; i < number; i++) { int arrange = averageLength - number/2 + i +1; result+= abs(towers[i] - arrange); cout << towers[i] << " " << result << " " << towers[i] - result <