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 }
posted @ 2022-03-19 15:34  scannerkk  阅读(116)  评论(0)    收藏  举报