#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <bitset>
typedef long long ll;
using namespace std;
bool solve(vector<int> a, vector<int> b) {
int n = a.size(), m = b.size();
int curr = 0;
int j = 0;
for (int i = 0; i<n; ++i) {
curr = 0;
while (curr < a[i] && j < m) {
curr += b[j];
++j;
}
if (curr != a[i]) {
return false;
}
}
return true;
}
signed main() {
cin.tie() -> sync_with_stdio(0);
int n, m;
cin >> n >> m;
vector<int> a(n), b(m);
if (n > m) {
cout << "NO\n";
return 0;
}
for (int i = 0; i<n; ++i) cin >> a[i];
for (int i = 0; i<m; ++i) cin >> b[i];
if (n == 1) {
ll x = a[0];
ll t = 1 << m;
for (ll i = 0; i<t; ++i) {
ll curr = 0;
for (ll j = 0; j<m; ++j) {
if (i & (1 << j)) curr += b[j];
}
if (curr == x) {
cout << "YES\n";
return 0;
}
}
cout << "NO\n";
return 0;
}
sort(b.begin(), b.end());
if (solve(a, b)) {
cout << "YES\n";
return 0;
}
while (next_permutation(b.begin(), b.end())) {
if (solve(a, b)) {
cout << "YES\n";
return 0;
}
}
cout << "NO\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |