PTA人以群分
一、题目描述
二、解题思路
要想两边的差距尽可能大,而且要人数尽可能平均,那么这就是一个典型的贪心的问题了。我们只需要把数组排个序,然后从前到一半,从一半到最后,统计一下和。然后输出即可。但是这个题有个问题就是当人数为奇数时,你要考虑把中间那个人加到左边还是右边答案更优。
三、代码实现
1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[100010]; 4 int main() 5 { 6 int n; 7 cin >> n; 8 int sum1 = 0; 9 int sum2 = 0; 10 for(int i = 1;i <= n;i++) 11 cin >> a[i]; 12 sort(a + 1,a + n + 1); 13 int ans = -INT_MAX; 14 for(int i = 1;i <= n / 2;i++) 15 sum1 += a[i]; 16 for(int i = n / 2 + 1;i <= n;i++) 17 sum2 += a[i]; 18 int out = n / 2; 19 int in = n / 2; 20 if(n & 1){ 21 if(ans < abs(sum1 - sum2)){ 22 ans = abs(sum1 - sum2); 23 in = n / 2; 24 out = n / 2 + 1; 25 } 26 sum1 += a[n / 2 + 1]; 27 sum2 -= a[n / 2 + 1]; 28 if(ans < abs(sum1 - sum2)){ 29 ans = abs(sum1 - sum2); 30 out = n / 2; 31 in = n / 2 + 1; 32 } 33 } 34 else 35 ans = max(ans,abs(sum1 - sum2)); 36 cout << "Outgoing #: " << out << endl; 37 cout << "Introverted #: " << in << endl; 38 cout << "Diff = "<< ans << endl; 39 return 0; 40 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}