Solução por Leonardo Paes
A observação mais importante é que:
- Uma chave com id ímpar só pode ser usada para abrir um baú com id par.
- Uma chave com id par só pode ser usada para abrir um baú com id ímpar.
Seja:
- o número de baús com id par e ímpar, respectivamente.
- o número de chaves com id par e ímpar, respectivamente.
Com baús de id par e chaves de id ímpar, você pode destrancar no máximo baús.
Com baús de id ímpar e chaves de id par, você pode destrancar no máximo baús.
Então, a resposta final é .
Complexidade: .
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
int main(){ | |
int n, m; | |
cin >> n >> m; | |
vector<int> a(n), b(m); | |
for(int i = 0; i < n; ++i){ | |
cin >> a[i]; | |
} | |
for(int i = 0; i < m; i++){ | |
cin >> b[i]; | |
} | |
int c0 = 0, c1 = 0; | |
for(int i = 0; i < n; i++){ | |
if (a[i]%2 == 0){ | |
c0++; | |
} | |
else{ | |
c1++; | |
} | |
} | |
int k0 = 0, k1 = 0; | |
for(int i = 0; i < m; i++){ | |
if (b[i]%2 == 0){ | |
k0++; | |
} | |
else{ | |
k1++; | |
} | |
} | |
int ans = min(c1, k0) + min(c0, k1); | |
cout << ans << endl; | |
return 0; | |
} |