Submission #1052859

# Submission time Handle Problem Language Result Execution time Memory
1052859 2024-08-11T04:59:14 Z manhlinh1501 Watching (JOI13_watching) C++17
50 / 100
1 ms 604 KB
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int MAXN = 105;
const int oo32 = 1e9;

int N, P, Q;
int a[MAXN];
int dp[MAXN][MAXN];

bool check(int K) {
    memset(dp, 0x3f, sizeof dp);
    dp[0][0] = 0;
    int x = 0, y = 0;
    for(int i = 1; i <= N; i++) {
        while(x < i and a[x + 1] < a[i] - K + 1)
            x++;
        while(y < i and a[y + 1] < a[i] - 2 * K + 1)
            y++;
        for(int j = 0; j <= P; j++) {
            dp[i][j] = dp[y][j] + 1;
            if(j > 0) dp[i][j] = min(dp[i][j], dp[x][j - 1]);
        }
    }
    for(int i = 1; i <= P; i++) {
        if(dp[N][i] <= Q)
            return true;
    }
    return false;
}

signed main() {
#define TASK "code"

    if (fopen(TASK ".inp", "r")) {
        freopen(TASK ".inp", "r", stdin);
        freopen(TASK ".out", "w", stdout);
    }

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> N >> P >> Q;
    for(int i = 1; i <= N; i++) cin >> a[i];
    if(P + Q >= N) return cout << 1, 0;
    P = min(P, N);
    Q = min(Q, N);
    sort(a + 1, a + N + 1);
    int low = 1, high = oo32;
    int ans = -1;
    while(low <= high) {
        int mid = (low + high) / 2;
        if(check(mid)) {
            ans = mid;
            high = mid - 1;
        } else low = mid + 1;
    }
    cout << ans;
    return (0 ^ 0);
}

Compilation message

watching.cpp: In function 'int main()':
watching.cpp:36:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |         freopen(TASK ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
watching.cpp:37:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |         freopen(TASK ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 1 ms 344 KB Output is correct
15 Correct 0 ms 344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 604 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -