【Codeforces】1213A - Chips Moving

2019-11-08 15:48:19 浏览数 (1)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/100170399

Problem Description:

You are given n chips on a number line. The i-th chip is placed at the integer coordinate

. Some chips can have equal coordinates.

You can perform each of the two following types of moves any (possibly, zero) number of times on any chip:

  • Move the chip i by 2 to the left or 2 to the right for free (i.e. replace the current coordinate

with

or with

);

  • move the chip i by 1 to the left or 1 to the right and pay one coin for this move (i.e. replace the current coordinate

with

or with

).

Note that it's allowed to move chips to any integer coordinate, including negative and zero.

Your task is to find the minimum total number of coins required to move all n chips to the same coordinate (i.e. all

should be equal after some sequence of moves).

Input Specification:

The first line of the input contains one integer n (1 ≤ n ≤ 100) — the number of chips.

The second line of the input contains n integers

,

,…,

(1 ≤

≤ 109), where

is the coordinate of the i-th chip.

Output Specification:

Print one integer — the minimum total number of coins required to move all n chips to the same coordinate.

Sample Input1:

代码语言:javascript复制
3
1 2 3

Sample Output1:

代码语言:javascript复制
1

Sample Input2:

代码语言:javascript复制
5
2 2 2 3 3

Sample Output2:

代码语言:javascript复制
2

解题思路:

这道题目的大意说白了就是输出奇偶数中个数较少的那个。判断奇偶性的时候用n&1或者n%2都行,这俩个是等价的。

AC代码:

代码语言:javascript复制
#include <bits/stdc  .h>
using namespace std;
#define Up(i,a,b) for(int i = a; i <= b; i  )

int main()
{
    ios::sync_with_stdio(false);
    int n, odd = 0, even = 0;
    cin >> n;
    Up(i,1,n)
    {
        int _;
        cin >> _;
        (_%2 ? odd   : even  );  //判断奇偶性,并记录奇偶数的个数
    }
    cout << min(odd,even) << endl;
    return 0;
}

0 人点赞