제출 #1170620

#제출 시각아이디문제언어결과실행 시간메모리
1170620anmattroi봉쇄 시간 (IOI23_closing)C++17
35 / 100
42 ms8632 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)) - min(distance(i, x), distance(i, y)));
    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, long long 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());
}

#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...
#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...