# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1277997 | manowo | 은행 (IZhO14_bank) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
// ---- Pragmas for GCC ----
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
// ---- Macros ----
#define int long long
#define pb push_back
#define all(x)(x).begin(), (x).end()
#define sz(x)((int)(x).size())
#define Airplane ios::sync_with_stdio(false);
cin.tie(nullptr);
const int INF = 1e18;
const int MOD = 1e9 + 7;
const int N = 1000;
int f[N];
int dp[N], dp2[N];
/** int a[N] , t[4 * N] , b[N];
void build(int v , int tl , int tr) {
if(tl == tr) {
t[v] = a[tl];
return;
}
int mid = (tl + tr) / 2;
build(v + v , tl , mid);
build(v + v + 1, mid + 1, tr);
t[v] = max(t[v + v] , t[v + v + 1]);
}
void upd(int v , int tl , int tr , int pos , int x) {
if(tl == tr) {
t[v] = x;
return;
}
int mid = (tl + tr) / 2;
if(pos <= mid) {
upd(v + v , tl , mid , pos , x);
} else {
upd(v + v + 1 , mid + 1 , tr , pos , x);
}
t[v] = max(t[v + v] , t[v + v + 1]);
}
int get(int v , int tl , int tr , int k) {
if(t[v] < k) {
return 0;
}
if(tl == tr) {
t[v] -= k;
return tl;
}
int ans = 0;
int mid = (tl + tr) / 2;
if(t[v + v] >= k) {
ans = get(v + v , tl , mid , k);
} else {
ans = get(v + v + 1 , mid + 1 , tr , k);
}
t[v] = max(t[v + v] , t[v + v + 1]);
return ans;
}
**/
int binpow(int b, int e, int mod) {
int res = 1;
while (e > 0) {
if (e % 2 == 1) {
res = (res * b) % mod;
}
b = (b * b) % mod;
e /= 2;
}
return res;
}
signed main() {
Airplane
int n, m;
cin >> n >> m;
vector < int > a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
vector < int > b(m);
for (int i = 0; i < m; i++) {
cin >> b[i];
}
if (n == 1) {
bool ok = false;
int ans = a[0];
int x = 1 << m;
for (int mask = 0; mask < x; mask++) {
int sum = 0;
for (int i = 0; i < m; i++) {
if ((1 << i) & mask) {
sum += b[i];
}
}
if (sum == ans) {
ok = true;
break;
}
}
if (ok) cout << "YES\n";
else cout << "NO\n";
} else {
multiset < int > s;
for (int i = 0; i < m; i++) {
s.insert(b[i]);
}
bool f = true;
for (int i = 0; i < n; i++) {
auto it = s.find(a[i]);
if (it != s.end()) {
s.erase(a[i]);
} else {
f = false;
break;
}
}
if (!f) {
cout << "NO\n";
} else {
cout << "YES\n";
}
}
}