题意:给你一个1*n的格子(n是偶数),对他们进行染色,染色的规则是一个黑一个白一个黑一个白,之后给你一个n/2个棋子问你让这些棋子都移动到颜色相等的地方的最小值是多少?移动的规则是不能越过前面的格子,且一个格子只能放一个
思路:首先明确一点,对于一个长度为n的格子他的黑白格其实都是已经确定了的值,那么他们要么都移动到偶数要不就都移动到奇数上我们判断一下就好了 比较水
代码:
#include <bits/stdc++.h>
using namespace std;
int a[111];
int main()
{
int n;
scanf("%d",&n);
for(int i = 1 ; i <= n/2 ; i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n/2+1);
//for(int i = 1 ; i <= n/2 ; i++) printf("%d ",a[i]);
int ans1 = 0,ans2 = 0;
//cout<<n<<endl;
int pos = n/2;
for(int i = n ; i > 1 ; i = i - 2)
{
// printf("i = %d %d a[pos] = %d\n",i,i-1,a[pos]);
ans1 += abs(i - a[pos]);
if(i-1 == 0) continue;
ans2 += abs((i-1) - a[pos]);
pos--;
}
printf("%d\n",min(ans1,ans2));
}