解題心得
vito family的進化版(?),如果直接重跑過一遍s[]把距離加起來會tle。
但最後還是用了黑魔法的那兩行才過的。
程式碼
#include <iostream> #include <algorithm> using namespace std; int s[2000000] = { 0 },record[30001] = { 0 }; int main() { cin.sync_with_stdio(false), cin.tie(0); int t, r; cin >> t; while (t--) { cin >> r; for (int i = 0; i < 30001; i++) record[i] = 0; for (int i = 0; i < r; i++) { cin >> s[i]; record[s[i]]++; } sort(s, s + r); int mid = 0; long long int d = 0; if (r % 2 == 1) mid = s[r / 2]; else mid = s[r / 2 - 1]; for (int i = 0; i <= 30000; i++) { d += abs(i - mid) * record[i]; } cout << d << " " << mid << endl; } return 0; }
沒有留言:
張貼留言