我说下我对 USACO 2021年 第二题的看法。也是和USACO的奶牛吉祥物有关,这题其实如果把思路想明白想透彻了,会很好做。

image

http://usaco.org/index.php?page=viewproblem2&cpid=1084

首先,抛开题目,分析一下各种奇数偶数进行加减的规律。不难发现,其实

  1. 偶数+ 偶数 = 偶数
  2. 奇数 + 奇数 = 偶数
  3. 奇数 + 偶数 = 奇数

那根据这些规律,我们可以总结一些条目。

  1. 如果奇数大于偶数,那么消掉2个奇数(就是把两个奇数相加),会得到一个新的偶数
  2. 如果偶数大于奇数,那么把一个偶数和奇数相加(相当于消掉一个偶数),最多可以把偶数消到和当前奇数一样多。
  3. 如果现在要求”偶数-奇数-偶数“的交题排列,满足要求的就是把偶数写得比奇数多1即可

综上所述,把这些思路组织成代码,就应该是

n = int(input())
a = [int(i) for i in input().split(" ")]

# even + even = even
# even + odd = odd
# odd + odd = even

even = len([i for i in a if i%2==0])
odd = n - even

while odd > even:
    odd = odd - 2
    even = even + 1
if even > odd + 1:
    even = odd + 1

print(even+odd)