QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#153176#6849. Mr. Liang play Card Gamejrjyy#WA 1ms3536kbC++201.8kb2023-08-29 15:52:022023-08-29 15:52:03

Judging History

This is the latest submission verdict.

  • [2023-08-29 15:52:03]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3536kb
  • [2023-08-29 15:52:02]
  • Submitted

answer

/* c.cpp */
#include <bits/stdc++.h>

using i64 = long long;
constexpr i64 inf = 1e18;

void solve() {
    int n, m, R, P;
    std::cin >> n >> m >> R >> P;

    std::vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        std::cin >> a[i];
        --a[i];
    }

    std::vector<int> v(m);
    for (int i = 0; i < m; ++i) {
        std::cin >> v[i];
    }

    if (P <= 2) {
        i64 ans = 0;
        for (auto x : a) {
            ans += v[x];
        }
        std::cout << ans << '\n';
        return;
    }

    std::vector s(m, std::vector<i64>(n + 1));
    for (int i = 0; i < m; ++i) {
        s[i][1] = v[i];
        for (int j = 2; j <= n; j *= 2) {
            s[i][j] = s[i][j / 2] * P;
        }
        for (int j = 2; j <= n; ++j) {
            s[i][j] = s[i][j & -j] + s[i][j & (j - 1)];
        }
    }

    std::vector f(n + 1, std::vector(n + 1, 0ll));
    for (int i = 0; i < n; ++i) {
        f[i][i + 1] = v[a[i]];
    }

    for (int len = 2; len <= n; ++len) {
        for (int l = 0; l + len <= n; ++l) {
            int r = l + len;
            for (int i = l + 1; i < r; ++i) {
                f[l][r] = std::max(f[l][r], f[l][i] + f[i][r]);
            }

            int lst = l, cnt = 1;
            i64 sum = 0;
            for (int i = l + 1; i < r; ++i) {
                if (a[i] == a[l]) {
                    sum += f[lst + 1][i];
                    lst = i;
                    cnt += 1;
                }
            }
            sum += f[lst + 1][r];
            f[l][r] = std::max(f[l][r], sum + s[a[l]][cnt]);
        }
    }

    std::cout << f[0][n] << '\n';
}

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int t;
    std::cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3536kb

input:

50
55 2 3 8
2 1 2 1 2 2 2 1 1 1 2 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 1
42126 55001
55 3 1 8
2 3 1 1 3 3 3 2 1 2 1 2 1 2 1 3 1 3 3 2 3 2 2 3 1 1 2 2 2 2 2 3 3 2 2 2 3 1 3 2 1 2 2 1 1 2 2 3 3 3 1 1 3 3 2
39105 57552 26545
55 2 3 9
2 1 2 2 2 2 2 2 2 2 ...

output:

261930682
256824249
5454318367
3661875
139810071
2189194
334792
859244
1057821
276184
2317173
3695796
1475228
14749831
9380633
331782
948220
952455
977955
1210135
103980
1553308
311282
1740740
773077
1426404
11206700
1239955
38009547
120368
168264
11240455
1259948
680475
528194
889298
2742096
173994...

result:

wrong answer 1st lines differ - expected: '38200162', found: '261930682'