제출 #12670

#제출 시각아이디문제언어결과실행 시간메모리
12670kipa00격자 보존하기 (GA9_preserve)C++98
56 / 100
32 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);
    int last = -1;
    for (i=0; i<k; ++i) {
        int now;
        scanf("%d", &now);
        if (last < 0) {
            last = now;
            start = now - 1;
        } else {
            put.push(now - last - 1);
            last = now;
        }
    }
    end = n - last;
    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...