题目链接:https://codeforces.com/contest/985

 

’A.Chess Placing

题意:给了一维的一个棋盘,共有n(n必为偶数)个格子。棋盘上是黑白相间的。现在棋盘上有n/2个棋子,让你全部移动到黑色格子或者白色格子,要求步数最少,并输出步数。

题解:由于黑色或者白色都是固定位置,我们对棋子位置排个序,然后全部移动到任意一个颜色,取两个最小步数的最小值就好了。

 1 #include<bits/stdc++.h>
 2 #define clr(x) memset(x,0,sizeof(x))
 3 #define clr_1(x) memset(x,-1,sizeof(x))
 4 #define mod 1000000007
 5 #define INF 0x3f3f3f3f
 6 #define LL long long
 7 #define pb push_back
 8 #define pbk pop_back
 9 #define ls(i) (i<<1)
10 #define rs(i) (i<<1|1)
11 #define mp make_pair
12 using namespace std;
13 const int N=1e5+10;
14 int a[N],p[N];
15 int n,d,ans1,ans2;
16 int main()
17 {
18     scanf("%d",&n);
19     ans1=ans2=0;
20     n/=2;
21     for(int i=1;i<=n;i++)
22         scanf("%d",p+i);
23     sort(p+1,p+n+1);
24     for(int i=1;i<=n;i++)
25     {
26        ans1+=abs(p[i]-i*2);
27        ans2+=abs(p[i]-(i*2-1));
28     }
29     printf("%d\n",min(ans1,ans2));
30     return 0;
31 }
View Code

相关文章: