-
题目大意:给出n个正整数,将它们分为2个集合,要求S1和S2分别代表两个集合数字的总和,n1和n2分别代表集合的个数,要求|n1 - n2|最小,|S1 - S2|。
-
思路:
- 从小到大排序;
- |S1 - S2| = 后半部分的和 - 前半部分的和
- 若n为奇数,则|n1 - n2| = 1,否则|n1 - n2| = 0
-
知识点:
- vector
- sort
-
代码:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n, a1 = 0, a2 = 0; cin >> n; vector<int> v(n); for(int i = 0; i < n; i++) cin >> v[i]; sort(v.begin(), v.end()); for(int i = 0; i < n; i++){ if(i < n / 2) a1 += v[i]; else a2 += v[i]; } if(n % 2 == 0) printf("0 %d", a2 - a1); else printf("1 %d", a2 - a1); return 0; }
-
总结:
- 不能用set,因为set会去重,万一给出数字重复就会报错。
【PAT】1113 Integer Set Partition (25 分)
最新推荐文章于 2024-01-19 11:40:52 发布