#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 (leftover[newmask] + b[i] < a[cover[newmask]]) {
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |