应该经常需要锻炼一下英语阅读理解能力和代码能力,所以以后还是需要多打打CF。
今天大概就是水一水找找感觉。
$n$个箱子,$m$个钥匙 ($n,m \leq 10^6$),每个箱子有参数$a_i$,每个钥匙有参数$b_i$
当且仅当,$a_i + b_j \equiv 1 (mod 2)$,则说箱子和钥匙配对成功。
注意到,一个箱子只能和一个钥匙配对最多一次。
要求最大化配对数。
Solution : 直接统计即可,考虑配对只可能是奇数+偶数或者偶数+奇数。
所以答案必然是$\min\{ cnta_{奇} , cntb_{偶}\} +\min\{ cnta_{偶} , cntb_{奇}\} $
# include <bits/stdc++.h> using namespace std; int cntA[2],cntB[2]; int n,m; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) { int t; scanf("%d",&t); cntA[t%2]++; } for (int i=1;i<=m;i++) { int t; scanf("%d",&t); cntB[t%2]++; } int ans=min(cntA[1],cntB[0])+min(cntA[0],cntB[1]); printf("%d\n",ans); return 0; }