Submission #1244955

#TimeUsernameProblemLanguageResultExecution timeMemory
1244955flying_saucerBank (IZhO14_bank)C++20
100 / 100
112 ms8520 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define PLL pair<long long, long long> #define LL long long #define faster {ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);} #define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> #define all(v) v.begin(),v.end() const LL mod = 998244353; const int N = 2e5 + 7; const LL INF = 1e17 + 1; const int inf = 1e9 + 1; void solve(int tc) { int n, m; cin >> n >> m; vector<int> salary(n), notes(m); for(auto &i: salary) cin >> i; for(auto &i: notes) cin >> i; vector<int> goodmsk(1 << m), msksum(1 << m); goodmsk[0] = 1; for(int i = 1; i < (1 << m); i++){ msksum[i] = msksum[i & (i - 1)] + notes[__builtin_ctz(i)]; } for(int i = 0, sum = 0; i < n; i++){ sum += salary[i]; for(int msk = 0; msk < (1 << m); msk++){ if(!goodmsk[msk]) continue; for(int j = 0; j < m; j++){ goodmsk[msk | (1 << j)] = 1; } goodmsk[msk] &= (msksum[msk] == sum); } } int fl = accumulate(all(goodmsk), 0); cout << (fl ? "YES" : "NO") << '\n'; } signed main() { faster int t = 1; // cin >> t; for (int tc = 1; tc <= t; tc++) { solve(tc); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...