제출 #1311998

#제출 시각아이디문제언어결과실행 시간메모리
1311998nikoloz-ch은행 (IZhO14_bank)C++20
0 / 100
4 ms1868 KiB
#include <bits/stdc++.h>
#define int int64_t
using namespace std;
int n, m;
vector<vector<vector<int>>> pub(20);
vector<vector<int>> sub(20);
bool rec(set<int> &a, int cur){
    auto y = pub[cur];
    for(auto &i : y){
        bool tr = false; set<int> st = a;
        for(auto &j : i){
            if(a.find(j) != a.end()) tr = true;
            st.insert(j);
        }
        if(tr) continue;
        if(cur == n or rec(st,cur+1)) return true;
    }
    return false;
}

void solve(){
    cin >> n >> m;
    vector<int> a(n), b(m);
    for(auto &i : a) cin >> i;
    for(auto &i : b) cin >> i;
    for(int i = 0; i < (1LL<<m); i++){
        vector<int> cur;
        for(int j = 0; j < m; j++){
            if(i & (1LL << j)){
                cur.push_back(j);
            }
        }
        sub.push_back(cur);
    }
    for(auto &i : sub){
        int k = 0;
        for(auto &j : i){
            k += b[j];
        }
        for(auto &j : a){
            if(j == k){
                pub[j].push_back(i);
            }
        }
    }
    set<int> st;
    if(rec(st,0)){
        cout << "YES\n";
        return;
    }
    cout << "NO\n";
}

signed main(){
    cin.tie(0)->sync_with_stdio(0);
    int _ = 1;// cin >> _; cout.tie(0);
    while(_--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...