Cod sursa(job #1548992)

Utilizator ioana.teocIoana Teoc ioana.teoc Data 11 decembrie 2015 19:10:15
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
//
//  main.cpp
//  Transport
//
//  Created by Ioana Teoc on 12/11/15.
//  Copyright (c) 2015 Ioana Teoc. All rights reserved.
//

#include <iostream>
#include <fstream>
using namespace std;


int N, K, V[16000], sum;

/*
 
 */
bool solution(int capacity){
    int noOfTransports= 0, transportSum = 0;
    
    for (int i = 0; i < N; i++) {
        if(V[i] > capacity){
            return false;
        }
        if(transportSum + V[i] >= capacity){
            noOfTransports++;
            transportSum = V[i];
        }
        else{
            transportSum +=V[i];
        }
    }
    return noOfTransports < K;
}

int search(){
    int infLim = 0, supLim = sum, mid;
    while(infLim < supLim){
        mid = (infLim + supLim)/2;
        if(solution(mid)){
            supLim = mid;
        }
        else{
            infLim = mid + 1;
        }
    }
    return infLim;
}

int main(int argc, const char * argv[])
{
    ifstream in("transport.in");
    ofstream out("transport.out");
    int i;
    if(in.is_open()){
    in>>N>>K;
    
    for(i = 0; i < N; i++){
        in>>V[i];
        sum += V[i];
    }
    int res = search();
    out<<res;
    }
    else{
        cout << "Unable to open file";
    }
    return 0;
}