【題解】CPE 一顆星選集:1. Vito’s Family

題目

有 t 組測資, r 個家,並輸入其門牌號碼 s[i],求我到所有家的最小距離和。
UVa 連結
ZeroJudge 連結

解法

錯誤解法:取門牌號碼的 Min 和 Max,我的位置則在 (Min+Max)/2。
反例:(1) 2 3 (4) (5),若我在 3,距離和為 2+1+2=5;若我在 (4),距離和為 3+0+1=4。

正確解法:把所有門牌號碼排序,取中位數。

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    int t, r;
    cin >> t;
    while(t--){
        cin >> r;
        int s[r], sum=0;
        for(int i=0; i<r; i++){
            cin >> s[i];
        }
        sort(s, s+r);
        int m = s[r/2];
        for(int i=0; i<r; i++){
            sum += abs(s[i] - m);
        }
        cout << sum << '\n';
    }
}
👉 回到:【CPE大學程式能力檢定】目錄
發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *