模拟找规律
这题就是贪心,但是你不知道怎么贪就是解不出来,换个思路吧。。
先模拟(绝对超时),然后发现规律。无论你怎么输,都是中位数
所以!就有了能通过的优化版本,提交AC
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100005;
int q[N];
int main() {
int n, ans;
cin >> n;
for (int i = 0; i < n; i++) cin >> q[i];
int res = 0x3f3f3f3f;
int x = 0;
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 0; j < n; j++) {
sum += abs(q[j] - q[i]);
}
if(sum < res) {
x = q[i];
res = sum;
}
}
cout << res << endl;
cout << x << endl; // 输出货仓位置
return 0;
}
找到规律得出正解
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100005;
int q[N];
int main() {
int n, ans;
cin >> n;
for (int i = 0; i < n; i++) cin >> q[i];
sort(q, q + n);
for (int i = 0; i < n; i ++ ) ans += abs(q[i] - q[n >> 1]);
cout << ans << endl;
return 0;
}