Submission #947438

#TimeUsernameProblemLanguageResultExecution timeMemory
947438PringBank (IZhO14_bank)C++17
100 / 100
477 ms856 KiB
#include <bits/stdc++.h> using namespace std; #ifdef MIKU string dbmc = "\033[1;38;2;57;197;187m", dbrs = "\033[0m"; #define debug(x...) cout << dbmc << "[" << #x << "]: ", dout(x) void dout() { cout << dbrs << endl; } template <typename T, typename ...U> void dout(T t, U ...u) { cout << t << (sizeof...(u) ? ", " : ""); dout(u...); } #else #define debug(...) 39 #endif #define int long long #define fs first #define sc second #define mp make_pair #define FOR(i, j, k) for (int i = j, Z = k; i < Z; i++) typedef pair<int, int> pii; const int MXN = 25; int n, m, a[MXN], c[MXN]; int p[MXN]; bitset<1050000> dp; int sum_of(int *a, int *b) { int ans = 0; while (a != b) { ans += *a; a++; } return ans; } int sum(int I) { int ans = 0; FOR(i, 0, m) if (I & (1 << i)) { ans += c[i]; } return ans; } int cv(int I) { return upper_bound(p, p + n, sum(I)) - p - 1; } bool DP(int I) { FOR(i, 0, m) if (I & (1 << i)) { int I_ = I ^ (1 << i); if (!dp[I_]) continue; int x = cv(I_), y = cv(I); if (x + 1 < y) continue; if (x == y) return true; if (p[y] == sum(I)) return true; } return false; } bool miku() { cin >> n >> m; FOR(i, 0, n) cin >> a[i]; FOR(i, 0, m) cin >> c[i]; if (sum_of(a, a + n) > sum_of(c, c + m)) return false; FOR(i, 0, n) p[i + 1] = p[i] + a[i]; if (sum_of(a, a + n) != sum_of(c, c + m)) { p[n + 1] = sum_of(c, c + m); n = n + 2; } else { n = n + 1; } dp[0] = true; FOR(I, 1, (1 << m)) dp[I] = DP(I); // FOR(i, 0, (1 << m)) cout << dp[i] << ' '; // cout << endl; return dp[(1 << m) - 1]; } int32_t main() { cin.tie(0) -> sync_with_stdio(false); cin.exceptions(cin.failbit); cout << (miku() ? "YES" : "NO") << '\n'; 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...