Submission #12669

#TimeUsernameProblemLanguageResultExecution timeMemory
12669kipa00격자 보존하기 (GA9_preserve)C++98
56 / 100
28 ms2372 KiB
#include <cstdio>
#include <queue>
using namespace std;

priority_queue<int, vector<int>, less<int> > put;
int horse[100000];

int main() {
    int start, end, n, k, d;
    int i;
    scanf("%d %d %d", &n, &k, &d);
    for (i=0; i<k; ++i) {
        scanf("%d", &horse[i]);
    }
    start = horse[0] - 1;
    end = n - horse[k - 1];
    for (i=1; i<k; ++i) {
        put.push(horse[i] - horse[i - 1] - 1);
    }
    if (d == 1) printf("%d\n", (start > end) ? start : end);
    else if (d == 2) printf("%d\n", (start + end > put.top()) ? (start + end) : put.top());
    else {
        int nd = d - 2;
        int now = 0, max = -1;
        for (i=0; i<nd/2; ++i) {
            now += put.top();
            put.pop();
        }
        nd %= 2;
        nd += 2;
        if (nd == 3) {
            max = put.top() + start;
            if (max < put.top() + end) {
                max = put.top() + end;
            }
            if (max < start + end) {
                max = start + end;
            }
        } else if (nd == 2) {
            max = start + end;
            if (max < put.top()) {
                max = put.top();
            }
        }
        printf("%d\n", now + max);
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...