题意:现在有一个1*N的棋盘(编号为1~N),棋盘颜色为“BWBWBW...”,现在有N/2个棋子在棋盘上,给你这N/2个棋子所在的位置,问将所有棋子都放在一个颜色的块上,最少需要多少步?
棋子每次只能移动一格,且不能移动到已经有棋子的格子上。
思路:可以发现只有两种情况,所有棋子都在B上,或者所有棋子都在W上,两个取最小值就是答案。假设都移动到B上,最后一个棋子一定对应最后一个B,第i个棋子对应第i个B,所以直接统计两种答案即可。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 105;
int n, a[MAXN];
int main()
{
scanf("%d", &n);
int ans1 = 0, ans2 = 0;
for (int i = 1; i <= n/2; i++) scanf("%d", &a[i]);
sort(a+1, a+1+n/2);
for (int i = 1; i <= n/2; i++)
{
ans1 += abs(2*i-1 - a[i]);
ans2 += abs(2*i - a[i]);
}
printf("%d\n", min(ans1, ans2));
return 0;
}