QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#598648#8034. Ban or Pick, What's the TrickHanoistWA 1ms7892kbC++142.0kb2024-09-28 22:48:022024-09-28 22:48:04

Judging History

This is the latest submission verdict.

  • [2024-09-28 22:48:04]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 7892kb
  • [2024-09-28 22:48:02]
  • Submitted

answer

#include<bits/stdc++.h>
const int N = 1e5+5;
using i64 = long long;
int n, m, a[N], b[N]; i64 f[N][11][11], vis[N][11][11];
signed main() {
    scanf("%d%d", &n ,&m); m = std::min(m, n);
    for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    for(int i = 1; i <= n; ++i) scanf("%d" ,&b[i]);
    std::sort(a + 1, a + n +1);
    std::sort(b + 1, b + n + 1);
    std::reverse(a + 1, a +n + 1);
    std::reverse(b + 1, b+ n + 1);
    //memset(f, 0xcf, sizeof f);
    // for(int i = 0; i <= n; ++i)
    //     for(int j = 0; j <= m; ++j)
    //         for(int k = 0; k <= m; ++k)
    //             f[i][j][k] = -2e9;
    f[0][0][0] = 0;
    for(int i = 1; i <= n; ++i)
        for(int j = 0; j <= std::min(i, m); ++j)
            for(int k = 0; k <= std::min(i, m); ++k) {
                 i64 num = 1e18;
                if(j) {
                    if(k && i + j - k <= n && i + k - j <= n && !vis[i - 1][j - 1][k - 1]) num = std::min(num, f[i - 1][j - 1][k - 1] + a[i + j - k] - b[i + k - j]);
                    if(k <= i - 1 && i + j - k - 1 <= n && !vis[i - 1][j - 1][k]) num = std::min(num, f[i - 1][j - 1][k] + a[ i + j - k - 1]);
                    if(num != 1e18) f[i][j][k] = std::max(f[i][j][k], num);
                }
                i64 num1 = 1e18;
                if(k && j <= i - 1 && i + k - j - 1 <= n && !vis[i - 1][j][k - 1]) num1 = std::min(num1, f[i - 1][j][k - 1] - b[i + k - j - 1]);
                if(j <= i -1  && k <= i -1 && !vis[i - 1][j][k] ) num1 = std::min(num1, f[i -1][j][k]);
                if(num1 != 1e18) f[i][j][k] = std::max(f[i][j][k], num1);
                if(num == 1e18 && num1 == 1e18) vis[i][j][k] = 1;
            }

    i64 ans = -1e18;
    for(int i = 0; i <= m; ++i) {
        i64 num = 1e18;
        for(int j = 0; j <= m; ++j){
            //printf("%lld ", f[n][i][j]);
            num = std::min(num, f[n][i][j]);
        }
       // puts("");
        ans = std::max(ans, num);
    }
    
    printf("%lld\n", ans);
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 5912kb

input:

2 1
3 6
2 4

output:

2

result:

ok single line: '2'

Test #2:

score: 0
Accepted
time: 1ms
memory: 5848kb

input:

4 1
1 3 5 7
2 4 6 8

output:

0

result:

ok single line: '0'

Test #3:

score: 0
Accepted
time: 0ms
memory: 7892kb

input:

4 2
4 6 7 9
2 5 8 10

output:

3

result:

ok single line: '3'

Test #4:

score: -100
Wrong Answer
time: 1ms
memory: 5840kb

input:

10 5
42 13 60 42 100 82 22 98 14 55
100 41 89 24 65 38 69 26 37 16

output:

32

result:

wrong answer 1st lines differ - expected: '41', found: '32'