답안 #1002086

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1002086 2024-06-19T09:48:43 Z vjudge1 구경하기 (JOI13_watching) C++17
0 / 100
45 ms 348 KB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 1000000000
int n, p, q;
vector<int> a;
int main(){
    cin>>n>>p>>q;
    a.assign(n + 1, 0);
    for (int i = 1; i <= n; i++){
        cin>>a[i];
    }
    sort(a.begin(), a.end());
    if (n <= p + q){
        cout<<1;
        return 0;
    }
    ll dp[n + 1][p + q + 1];
    int l = 1, r = 1000000000, w = -1;
    while (l <= r){
        int mid = (l + r) / 2;
        for (int i = 0; i <= n; i++){
            for (int j = 0; j <= p + q; j++){
                dp[i][j] = 0;
            }
        }
        for (int j = 0; j <= p + q; j++){
            dp[0][j] = 1;
        }
        for (int i = 1; i <= n; i++){
            for (int j = 0; j <= p + q; j++){
                if (i <= p + q){
                    dp[i][j] = 1;
                    continue;
                }
                for (int k = i - 1; k >= -1; k--){
                    if (a[i] - a[k + 1] + 1 <= 2 * mid && j != 0) dp[i][j] = max(dp[i][j], dp[k + 1][j - 1]);
                    if (a[i] - a[k + 1] + 1 <= mid && j != p + q) dp[i][j] = max(dp[i][j], dp[k + 1][j]);
                    if (k == -1 || a[i] - a[k] + 1 > 2 * mid) break;
                }
            }
        }
        if (dp[n][q] == 1){
            r = mid - 1;
            w = mid;
        }
        else{
            l = mid + 1;
        }
    }
    cout<<w;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 45 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -