Submission #1278371

#TimeUsernameProblemLanguageResultExecution timeMemory
1278371CAZRALOBank (IZhO14_bank)C++20
100 / 100
83 ms8652 KiB
#include<bits/stdc++.h>
using namespace std;
template<typename... T> 
void see(T&... args) { ((cin>>args),...); }
template<typename... T>
void put(T&&... args) { ((cout<<args<<' '),...); }
template<typename... T>
void putl(T&&... args) { ((cout<<args<<' '),...); cout<<'\n'; }
#define ull unsigned long long
#define ll long long
#define MASK(x) (1ll<<(x))
#define BIT(x,i) (x>>i&1)
#define ins insert
#define pb push_back
#define eb emplace_back
#define bg(a) a.begin()
#define sz(a) (int)a.size()
#define PB pop_back();
#define PF pop_front();
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define fu(i,a,b) for (int i=(a); i<=(b); ++i)
#define f0u(i,a,b) for (int i=(a); i<(b); ++i)
#define fd(i,a,b) for (int i=(a); i>=(b); --i)
#define f0d(i,a,b) for (int i=(a)-1; i>=(b); --i)
#define str string 
#define trav(x,a) for (auto &x : a) 
#define pii pair<int,int>
#define tiii tuple<int,int,int>
#define vi vector<int>
#define vpi vector<pii>
#define ii pair<int,int> 
#define fi first 
#define se second

#define lb lower_bound
#define ub upper_bound
template<class T > int lwb(vector<T> &a, const T &b) { return (int)(lb(all(a), b) - bg(a)); }
template<class T > int upb(vector<T> &a, const T &b) { return (int)(ub(all(a), b) - bg(a)); }

const int inf = 1e9;
const long long MOD = 1000000007;
const signed MAXN = 2e5+5;
const signed LOG = 19;

template<class T>inline T gcd(T a,T b) { while (b) swap(b, a%=b); return a; }
template<class T>inline T lcm(T a,T b) { return a / gcd(a, b) * b; }
template<class T1, class T2>
bool ckmax(T1 &a, const T2 b) { return a < b ? a = b, 1 : 0; }
template<class T1, class T2>
bool ckmin(T1 &a, const T2 b) { return a > b ? a = b, 1 : 0; }

int a[20],b[20];
int n,m;

void subtask1() {
    for (int mask = 0; mask < (1<<m); mask++) {
        int sum = 0;
        f0u(i,0,m) if (BIT(mask,i)) sum+=b[i];
        if (sum==a[0]) {
            putl("YES");
            return;
        }
    }
    put("NO");
}

void solve(){
    see(n,m);
    fu(i,0,n-1) see(a[i]);
    fu(i,0,m-1) see(b[i]);
    if (n==1) { subtask1(); return; }
    vi leftover(MASK(m),-1),cover(MASK(m),-1);
    cover[0] = leftover[0] = 0;
    for (int mask = 0; mask < (1<<m); mask++) {
        int sum = 0;
        f0u(i,0,m) if (BIT(mask,i)) {
            sum+=b[i];
            int newmask = mask^MASK(i);
            if (leftover[newmask] + b[i] == a[cover[newmask]]) {
                cover[mask] = cover[newmask] + 1;
                leftover[mask] = 0;
            } else if (cover[newmask]>cover[mask]) {
                cover[mask] = cover[newmask];
                leftover[mask] = leftover[newmask] + b[i];
            } 
        }
        if (cover[mask] == n) {
            putl("YES");
            return;
        }
    }
    putl("NO");
}

#define FNAME ""
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    int t = 1;
    if (fopen(FNAME".inp","r")) {
        freopen(FNAME".inp","r",stdin);
        freopen(FNAME".out","w",stdout);
    }
    //see(t);
    while (t--) solve();
    return 0;
}

Compilation message (stderr)

bank.cpp: In function 'int main()':
bank.cpp:102:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  102 |         freopen(FNAME".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
bank.cpp:103:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  103 |         freopen(FNAME".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...