Submission #1277995

#TimeUsernameProblemLanguageResultExecution timeMemory
1277995manowoBank (IZhO14_bank)C++20
0 / 100
1 ms572 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(f) 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...