제출 #1310083

#제출 시각아이디문제언어결과실행 시간메모리
1310083bluecat은행 (IZhO14_bank)C++20
100 / 100
96 ms8660 KiB
// #pragma GCC optimize("Ofast,unroll-loops")
// #pragma GCC target("avx,avx2,fma")
#include "bits/stdc++.h"
using namespace std;
using ll   = long long;
using ld   = long double;
using ui   = unsigned int;
using ul   = unsigned long long;
using i128 = __int128;
using pii  = pair<int, int>;
using pll  = pair<ll, ll>;
using t3i  = tuple<int, int, int>;
using t3l  = tuple<ll, ll, ll>;
using vi   = vector<int>;
using vl   = vector<long long>;
using arr  = array<int, 4>;
using node = pair<int, arr>;
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n, q; cin >> n >> q;
    vector<int> a(n), b(q);
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < q; i++) cin >> b[i];
    vector<int> d(1<<q,-1), p(1<<q);
    d[0] = 0;
    for (int m = 0; m < (1<<q); m++)
        for (int i = 0; i < q; i++) if ((m>>i)&1 && d[m^(1<<i)]!=-1)
        {
            if (p[m^(1<<i)]+b[i]==a[d[m^(1<<i)]]) d[m] = d[m^(1<<i)]+1, p[m] = 0;
            else if (p[m^(1<<i)]+b[i]<a[d[m^(1<<i)]]) d[m] = d[m^(1<<i)], p[m] = p[m^(1<<i)]+b[i];
        }
    int res = 0;
    for (int m = 0; m < (1<<q); m++) res |= d[m]==n;
    cout << (res?"YES\n":"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...