列表

详情


NC222458. [USACOJan2021B]EvenMoreOddPhotos

描述

Farmer John is yet again trying to take a photograph of his N cows (2≤N≤1000).
Each cow has an integer "breed ID" number in the range 1…100. Farmer John has a very peculiar idea in mind for his photo: he wants to partition all the cows into disjoint groups (in other words, place each cow in exactly one group) and then line up the groups so the sum of the breed IDs of the cows in the first group is even, the sum of the IDs in the second group is odd, and so on, alternating between even and odd.

What is the maximum possible number of groups Farmer John can form?

输入描述

The first line of input contains N. The next line contains N space-separated integers giving the breed IDs of the N cows.

输出描述

The maximum possible number of groups in Farmer John's photo. It can be shown that at least one feasible grouping exists.

示例1

输入:

7
1 3 5 7 9 11 13

输出:

3

说明:

In this example, one way to form the maximum number of three groups is as follows. Place 1 and 3 in the first group, 5, 7, and 9 in the second group, and 11 and 13 in the third group.

示例2

输入:

7
11 2 17 13 1 15 3

输出:

5

说明:

In this example, one way to form the maximum number of five groups is as follows. Place 2 in the first group, 11 in the second group, 13 and 1 in the third group, 15 in the fourth group, and 17 and 3 in the fifth group.

Problem credits: Nick Wu

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 3ms, 内存消耗: 408K, 提交时间: 2021-11-15 14:52:01

#include <iostream>
using namespace std;

int main(void) {
  int N, O = 0, E = 0;
  cin >> N;
  for (int i = 0, x; i < N; i++) {
    cin >> x;
    E += 1 ^ (x % 2), O += (x % 2);
    // if (x % 2 == 0)
    //   E++;
    // else
    //   O++;
  }
  while (O > E)
    O = O - 2, E++;

  E = min(E, O + 1);
  // if (E > O + 1)
  //   E = O + 1;
  cout << E + O << endl;
}

上一题