Submission #1277998

#TimeUsernameProblemLanguageResultExecution timeMemory
1277998manowo은행 (IZhO14_bank)C++20
19 / 100
12 ms584 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";
        }
    }

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...