Cod sursa(job #1130943)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 28 februarie 2014 16:42:21
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

vector <int> s;
int n, k, suma, maxim, rez;

int valid(int x)
{
    int crt=0, tot=1;
    for(int i=0; i<n; i++){
        if(crt+s[i] <=x)
            crt+=s[i];
        else{
            crt = s[i];
            tot++;
        }
    }
    if(tot>k)
        return -1;
    if(tot <= k)
        return 1;
}

int caut_bin()
{
    int lo, hi, mid;
    lo = maxim-1;
    hi = suma+1;
    while(hi-lo>1){
        mid = lo +(hi-lo)/2;
        if(valid(mid) == -1)
            lo = mid;
        else
            hi = mid;
    }
    return hi;
}

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    int t;
    scanf("%d %d\n", &n, &k);
    for(int i=0; i<n; i++){
        scanf("%d ", &t);
        if(t>maxim) maxim = t;
        s.push_back(t);
        suma+=t;
    }
    printf("%d", caut_bin());
    return 0;
}