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

題目簡述:有 t 組測資,r 個家,門牌號碼為 si (0 < si < 30000),求我到所有家的最小距離和。
題目 / ZJ

錯誤作法:取門牌號碼的 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(){
    ios::sync_with_stdio(0), cin.tie(0);
    int t, r;
    cin >> t;
    while(t--){
        cin >> r;
        int s[r], ans=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++){
            ans += abs(s[i] - m);
        }
        cout << ans << '\n';
    }
}
👉 回到:【CPE大學程式能力檢定】目錄
發佈留言

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