Cod sursa(job #2151155)

Utilizator raducostacheRadu Costache raducostache Data 4 martie 2018 10:13:09
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
//
//  main.cpp
//  transport
//
//  Created by Radu Costache on 04.03.2018.
//  Copyright © 2018 Radu Costache. All rights reserved.
//

#include <fstream>

#define MAX(a,b) ((a) > (b) ? (a) : (b))

using namespace std;

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

int n,k,st,dr,v[16000];

int nrop(int);
int findC();

int main(int argc, const char * argv[]) {
    // insert code here...
    f >> n >> k;
    for(int i = 0 ; i < n ; ++i){
        f >> v[i];
        dr += v[i];
    }
    g << findC() << '\n';
    return 0;
}

int findC(){
    int m;
    while(st <= dr){
        m = (st + dr) / 2;
        int x = nrop(m);
        if(x <= k)dr = m - 1;
        else st = m + 1;
    }
    return st;
}
int nrop(int x){
    int s = 0,t = 1;
    for(int i = 0 ; i < n ; ++i){
        if(v[i] > x)return k + 1;
        if(s + v[i] <= x){
            s += v[i];
        }
        else{
            s = v[i];
            ++t;
        }
    }
    return t;
}