題目來源
題意
- 輸入一行的住家並找到一個值是全部住家距離最近的點
- 將上述離全部住家的最近點距離總和,並輸出
思路
- 輸入與前處理
- 一開始輸入n,代表輸入n組側資
- 每一組測資內含有r,代表有r戶人,並輸入其門牌位置
1 2 3 4 5 6 7 8 9 10
int n; cin>>n; while (n--){ int r; cin>>r; int s[r]; for (int i=0;i<r;i++){ cin>>s[i]; } }
-
資料處理
思路
在一個已經排列好的數列 ${a_n}$ 中,若從中找出a,$\Sigma \mid a-ai \mid $的最小值成立在a是中位時,因此
- 將array s進行排列
- 找出中位數 (即
s[r/2]
) - 算出距離總和
1 2 3 4 5
sort(s,s+r); int ans=0; for (int i=0;i<r;i++){ ans+=abs(s[i]-s[r/2]); }
-
輸出
1
cout<<ans<<endl;
參考答案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
while (n--){
int r;
cin>>r;
int s[r];
for (int i=0;i<r;i++){
cin>>s[i];
}
sort(s,s+r);
int ans=0;
for (int i=0;i<r;i++){
ans+=abs(s[i]-s[r/2]);
}
cout<<ans<<endl;
}
return 0;
}