题意:就是给你一堆树,让你每次操作能改变一棵树的高度, 高度从左到中间+1,从右边到中间-1, 问最少改变次数;
分析:自己居然还看不出暴力,回来后才知道原来暴力可以做,但是自己写的太丑太复杂,在一些地方错了之后就不想改了,
看了别人的代码,真好。。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100005;
int a[maxn], vis[maxn];
int main()
{
#ifdef LOCAL
freopen("E:\\in.txt", "r", stdin);
#endif // LOCAL
int n;
while (~scanf("%d", &n)) {
memset(vis, 0, sizeof vis);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
int mid = n / 2 + n % 2;
for (int i = 1; i <= mid; i++)
if (a[i] - i >= 0) {
vis[a[i] - i]++;
}
for (int i = n; i > mid; i--)
if (a[i] - (n - i + 1) >= 0) {
vis[a[i] - (n - i + 1)]++;
}
int mx = 0;
for (int i = 0; i < maxn; i++)
mx = max(mx, vis[i]);
printf("%d\n", n - mx);
}
return 0;
}