Submission #1359713

#TimeUsernameProblemLanguageResultExecution timeMemory
1359713backer8002Rice Hub (IOI11_ricehub)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

bool possible(int r, int amountOfHub , const int x[],long long b) {
    if (amountOfHub == 1)
        return true;
    int count = 0;
    const int firstHub = x[amountOfHub/2];
    for (int i = 0; i < amountOfHub; i++)
        count += abs(firstHub - x[i]);
    if (count <= b)
        return true;

    for (int i = 0; i < r-amountOfHub; i++) {
        count -= x[firstHub+i] - x[i];
        count += x[i+amountOfHub] - x[firstHub+i];
        int distToTravel = x[i+1+firstHub] - x[i+firstHub];
        int leftHubs = (amountOfHub+1)/2-1;
        count += leftHubs * distToTravel - (amountOfHub-leftHubs)*distToTravel;
        if (count <= b)
            return true;
    }
    return false;
}

int besthub (int r, int, int x[],long long B) {
    int begin = 1,end = r;
    while (end - begin > 1) {
        int mid = (end+begin)/2;
        if (possible(r,mid,x,B))
            begin = mid;
        else
            end = mid;
    }
    if (possible(r,end,x,B))
        return end;
    return begin;
}
#if 0
int main() {
    int r,l,b;
    cin >> r >> l >> b;
    vector<int> vec(r);
    for (int& v : vec) cin >> v;
    cout << besthub(r,l,vec.data(),b);
}
#endif
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...