题意
给定 个数 ,求出 并改变每一个 ,使得每一个 。
思路
首先,因为 ,所以 ,否则必然有一种方法找到一个更优的 。我们可以枚举 。
接着,我们求每一个 对应的花费 。显然,因为要让 ,所以:
- 当 时, 不需要改动。
- 否则,我们只需要让 即可,无需让 。因此 即可。
代码
#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);
}