제출 #1170615

#제출 시각아이디문제언어결과실행 시간메모리
1170615anmattroi봉쇄 시간 (IOI23_closing)C++17
컴파일 에러
0 ms0 KiB
#include "closing.h"
#include <bits/stdc++.h>
#define maxn 200005

using namespace std;

int n, x, y;
int64_t s[maxn], k;

int64_t distance(int a, int b) {
    if (a > b) swap(a, b);
    return s[b] - s[a];
}

int sub0() {
    vector<int64_t> nho;
    for (int i = 0; i < n; i++) nho.emplace_back(min(distance(x, i), distance(y, i)));
    sort(nho.begin(), nho.end());
    int64_t ans = 0;
    for (int i = 0; i < n; i++) {
        ans += nho[i];
        if (ans > k) return i;
    }
    return n;
}

int sub1() {
    int64_t ans = 0;
    for (int i = x; i <= y; i++) ans += min(distance(i, x), distance(y, i));
    if (ans > k) return 0;
    int best = y-x+1;

    vector<int64_t> nho, outliers;

    for (int i = 0; i < n; i++) nho.emplace_back(max(distance(i, x), distance(y, i)));
    for (int i = 0; i < x; i++) outliers.emplace_back(distance(i, x));
    for (int i = y+1; i < n; i++) outliers.emplace_back(distance(i, y));

    sort(outliers.begin(), outliers.end());
    sort(nho.begin(), nho.end());

    for (int i = 0; i < n; i++) {
        ans += nho[i];
        if (ans > k) return best;
        int p = outliers.size(); int64_t sum = ans;
        for (int j = 0; j < outliers.size(); j++) {
            sum += outliers[j];
            if (sum > k) {
                p = j;
                break;
            }
        }
        if (p + y-x+1 >= i + 1) best = max(best, p + i + 1 + y-x+1);
    }
    return best;
}

int max_score(int N, int X, int Y, int64_t K, vector<int> U, vector<int> V, vector<int> W) {
    n = N; x = X; y = Y; k = K;
    for (int i = 1; i < N; i++) s[i] = s[i-1] + W[i-1];

    return max(sub0(), sub1());
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccmWSJjw.o: in function `main':
grader.cpp:(.text.startup+0x75d): undefined reference to `max_score(int, int, int, long long, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status