【Codeforces】1213A – Chips Moving

正文索引 [隐藏]

Problem Description:

You are given n chips on a number line. The i-th chip is placed at the integer coordinate x_{i}. 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 x_{i} with x_{i}-2 or with x_{i}+2);
  • 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 x_{i} with x_{i}-1 or with x_{i}+1).

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 x_{i} 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 x_{1},x_{2},…,x_{n} (1 ≤ x_{i} ≤ 109), where x_{i} 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:

3
1 2 3

Sample Output1:

1

Sample Input2:

5
2 2 2 3 3

Sample Output2:

2

解题思路:

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

AC代码:

#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;
}