Cod sursa(job #1404972)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 28 martie 2015 18:41:07
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <algorithm>

using namespace std;

#define inFile "transport.in"
#define outFile "transport.out"
#define MAX_N 16001
#define INF 1<<30

int volume[MAX_N];

int getPasses(int truckVolume, int n) {
    int currVolume = 0, i, passes = 0;
    for(i = 1; i <= n; i++) {
        if(volume[i] > truckVolume)
            return INF;
        if(currVolume + volume[i] <= truckVolume)
            currVolume += volume[i];
        else 
            currVolume = volume[i], passes++;
    }
    return passes+1;
}

int main() {
    ifstream in(inFile);
    ofstream out(outFile);
    
    int n, k, i, begSearch, midSearch, endSearch, lastFound, passes;
    
    in >> n >> k;
    for(i = 1; i <= n; i++)
        in >> volume[i];
    
    begSearch = 1;
    endSearch = INF;
    lastFound = -1;
    while(begSearch <= endSearch) {
        midSearch = (begSearch + endSearch) >> 1;
        passes = getPasses(midSearch, n);
        if(passes > k)
            begSearch = midSearch + 1;
        if(passes <= k) {
            lastFound = midSearch;
            endSearch = midSearch - 1;
        }
    }
    
    out << lastFound << '\n';
    
    return 0;
}