Cod sursa(job #1795486)

Utilizator AhileGigel Frone Ahile Data 2 noiembrie 2016 15:54:04
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<bits/stdc++.h>
using namespace std;
#define in f
#define out g

ifstream f("transport.in");
ofstream g("transport.out");

int const inf = 1000000;
int n;
int k;
int v[16010];
int maxx;

int valid(int x) {

    int drum = 1;
    int aux = x;
    for(int i = 1; i <= n; ++i) {
        if(v[i] > x) {
            return false;
        }
        if(aux >= v[i]) {
            aux -= v[i];
        } else {
            aux = x - v[i];
            drum++;
        }
    }
    if(drum <= k) {
        return true;
    } else {
        return false;
    }
}

int binsearch(int fin) {

    int pos = fin;
    int step = 1;
    for(step = 1; step < fin; step *= 2);

    for(int i = 1; step > 0; step /= 2) {
        if(pos - step > 0 && valid(pos - step))
            pos -= step;
    }
    out << pos;
}

int main() {

    in >> n;
    in >> k;

    for(int i = 1; i <= n; ++i) {
        in >> v[i];
        maxx += v[i];
    }
    binsearch(maxx);
}