Cod sursa(job #1451555)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 17 iunie 2015 16:39:59
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;

const int maxn = 16005;

int n, v[maxn], k;

int nr_transport(int c) {
    int sum = 0, cnt = 0;
    for(int i = 1 ; i <= n ; ++ i) {
        if(sum + v[i] <= c)
            sum += v[i];
        else {
            ++ cnt;
            if(v[i] > c)
                return INT_MAX;
            sum = v[i];
        }
    }
    if(sum != 0)
        cnt ++;
    return cnt;
}

int main() {
    ifstream fin("transport.in");
    ofstream fout("transport.out");
    fin >> n >> k;
    for(int i = 1 ; i <= n ; ++ i)
        fin >> v[i];
    int st = 1, dr = maxn * maxn;
    int rez = -1;
    while(st <= dr) {
        int mid = (st + dr) / 2;
        /// ne-am fixat capacitatea
        int act = nr_transport(mid);
        cerr << st << ' ' << dr << ' ' << mid << ' ' << act << '\n';
        if(act <= k) { /// pot folosi capacitatea mijlor, o sa caut o valoare mai mica
            dr = mid - 1;
            rez = mid;
        }
        else
            st = mid + 1;
    }
    fout << rez << '\n';
    return 0;
}