Submission #947437

# Submission time Handle Problem Language Result Execution time Memory
947437 2024-03-16T07:19:26 Z Pring Bank (IZhO14_bank) C++17
19 / 100
302 ms 712 KB
#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) {
    // if (I == 20) debug(I, sum(I));
    FOR(i, 0, m) if (I & (1 << i)) {
        int I_ = I ^ (1 << i);
        if (I == 20) debug(I, I_);
        if (!dp[I_]) continue;
        int x = cv(I_), y = cv(I);
        // if (I == 20) debug(x, y, p[y]);
        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];
    p[n + 1] = sum_of(c, c + m);
    n = n + 2;
    // FOR(i, 0, n) cout << p[i] << ' ';
    // cout << endl;
    dp[0] = true;
    FOR(I, 1, (1 << m)) dp[I] = DP(I);
    // FOR(i, 0, (1 << m)) cout << dp[i] << ' ';
    // cout << endl;
    // cout << dp[20] << '\n';
    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;
}

Compilation message

bank.cpp: In function 'bool DP(long long int)':
bank.cpp:11:20: warning: statement has no effect [-Wunused-value]
   11 | #define debug(...) 39
      |                    ^~
bank.cpp:51:22: note: in expansion of macro 'debug'
   51 |         if (I == 20) debug(I, I_);
      |                      ^~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 504 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 7 ms 348 KB Output is correct
5 Correct 82 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 302 ms 348 KB Output is correct
9 Correct 138 ms 712 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 504 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 7 ms 348 KB Output is correct
5 Correct 82 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 302 ms 348 KB Output is correct
9 Correct 138 ms 712 KB Output is correct
10 Incorrect 1 ms 344 KB Output isn't correct
11 Halted 0 ms 0 KB -