A. Chess Placing

链接

[https://codeforces.com/contest/985/problem/A]

题意

给你一个偶数n,输入n/2个数,代表棋子的位置,有一个1*n的棋盘是黑白相间的
问你使得所有棋子在同一种颜色所需移动的最小步数

分析

先对所有棋子的位置排序
贪心枚举两种颜色都算在比较

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
int a[110];
int main(){
	ios::sync_with_stdio(false); cin.tie(0);
	cout.tie(0);
	//freopen("in.txt","r",stdin);
	int n;
	while(cin>>n){
		for(int i=1;i<=n/2;i++)
		cin>>a[i];
		sort(a+1,a+n/2+1);
		int sum1=0,sum2=0;
		int o=n-1,k=n;
		for(int i=n/2;i>0;i--){
			if(a[i]!=k) sum2+=abs(k-a[i]);
			k-=2;
		} 
		for(int i=n/2;i>0;i--)
		{
			if(a[i]!=o) sum1+=abs(o-a[i]);
			o-=2;
		}
		cout<<min(sum1,sum2)<<endl;
	}
	return 0;
}
posted @ 2018-12-07 15:17  ChunhaoMo  阅读(140)  评论(0)    收藏  举报