題目鏈結
給定乙個包含 n 個正整數的集合,請你將它們劃分為兩個不相交的集合 a1 和 a2,其中 a1 包含 n1 個元素,a2 包含 n2 個元素。
用 s1 表示集合 a1 內所有元素之和,s2 表示集合 a2 內所有元素之和。
請你妥善劃分,使得 |n1−n2| 盡可能小,並在此基礎上 |s1−s2| 盡可能大。
輸入格式
第一行包含整數 n。
第二行包含 n 個正整數。
輸出格式
再一行中輸出 |n1−n2| 和 |s1−s2|,兩數之間空格隔開。
資料範圍
2≤n≤105,
保證集合中各元素以及所有元素之和小於 231。
輸入樣例1:
10238
1099
462333461
666555
輸出樣例1:
0
3611
輸入樣例2:
13
11079
21869
3721
10029
1352613
5188
85
輸出樣例2:
1
9359
題意:
使得兩個集合的個數盡量的小,然後在那個基礎上使得兩個集合的差最大
思路:集合個數盡量的小—>不是 0 就是 1 ( 偶數 or 奇數
差最大—> 乙個將所有最小的 n / 2 個數包攬, 另乙個將剩餘的最大的數包攬, 相減即可
答案:
#include
#include
#define ll long long
#define inf 0x3f3f3f3f
const
int mod =10;
const
int n =
1e5+10;
const
int m =
1111
;using
namespace std;
int a[n]
;void
solve()
sort
(a+1
,a+1
+n);
for(
int i=
1;i<=n/
2;i++
) sum1+
=a[i]
;for
(int i=n;i>n/
2;i--
) sum2+
=a[i];if
(n%2
) cout<<
1<<
" "
0<<
" "<}int
main()
Acwing 900 整數劃分
乙個正整數n可以表示成若干個正整數之和,形如 n n1 n2 nk,其中n1 n2 nk,k 1。我們將這樣的一種表示稱為正整數n的一種劃分。現在給定乙個正整數n,請你求出n共有多少種不同的劃分方法。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示總劃分數量。由於答案可能很大,...
AcWing 900 整數劃分
題目描述 乙個正整數n可以表示成若干個正整數之和,形如 n n1 n2 nk,其中n1 n2 nk,k 1。我們將這樣的一種表示稱為正整數n的一種劃分。現在給定乙個正整數n,請你求出n共有多少種不同的劃分方法。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示總劃分數量。由於答案...
AcWing 2068 整數拼接
原題鏈結 考察 列舉 hash 思路 暴力是直接列舉a i 與a j 需要優化省去一重迴圈.我們列舉的a i a j 檢查是否為k倍數時,需要讓a j 10t a i t位為a i 的位數,注意這裡用字串轉換反而不如直接求位數方便 一重迴圈列舉a i 時,t已知,a i 已知,剩下的是快速找符合條件...