Submission #1219300

#TimeUsernameProblemLanguageResultExecution timeMemory
1219300trufanov.pBank (IZhO14_bank)C++20
100 / 100
156 ms8644 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <string>
#include <queue>
#include <unordered_set>
#include <deque>
#include <numeric>
#include <cmath>
#include <unordered_map>

using namespace std;

#pragma GCC optimize("O3")
//#pragma GCC optimization("Ofast,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

typedef long long ll;

inline bool in(int mask, int i) {
    return (mask >> i) & 1;
}

inline int del(int mask, int i) {
    return mask & (~(1 << i));
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    vector<int> a(n + 1), b(m);
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    for (int i = 0; i < m; ++i) {
        cin >> b[i];
    }
    vector<int> pref(n + 1);
    partial_sum(a.begin(), a.end(), pref.begin());
    vector<int> sum(1 << m);
    sum[0] = 0;
    for (int mask = 1; mask < (1 << m); ++mask) {
        for (int i = 0; i < m; ++i) {
            if (in(mask, i)) {
                sum[mask] = sum[del(mask, i)] + b[i];
            }
        }
    }
    vector<int> dp(1 << m);
    dp[0] = 0;
    for (int mask = 1; mask < (1 << m); ++mask) {
        for (int i = 0; i < m; ++i) {
            if (!in(mask, i)) {
                continue;
            }
            if (sum[del(mask, i)] - pref[dp[del(mask, i)]] + b[i] == a[dp[del(mask, i)] + 1]) {
                dp[mask] = dp[del(mask, i)] + 1;
            }
            dp[mask] = max(dp[mask], dp[del(mask, i)]);
            if (dp[mask] == n) {
                cout << "YES\n";
                return 0;
            }
        }
    }
    cout << "NO\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...