题意
给定 个数
,求出
并改变每一个
,使得每一个
。
思路
首先,因为 ,所以
,否则必然有一种方法找到一个更优的
。我们可以枚举
。
接着,我们求每一个 对应的花费
。显然,因为要让
,所以:
- 当 时,
不需要改动。
- 否则,我们只需要让 即可,无需让
。因此
即可。
代码
#include<bits/stdc++.h>
using namespace std;
int n,a[1005],ans1 = 0,ans2 = 1e9;
int find(int t) {
int ans = 0;
for(int i = 1;i <= n;i++) {
if(abs(a[i] - t) > 1) ans += abs(a[i] - t) - 1;
}
return ans;
}
int main() {
scanf("%d",&n);
for(int i = 1;i <= n;i++) scanf("%d",&a[i]);
for(int t = 1;t <= 1000;t++) {
if(find(t) < ans2) ans1 = t,ans2 = find(t);
}
printf("%d %d",ans1,ans2);
}