Cod sursa(job #2069267)

Utilizator sansidiaDiana Vrabie sansidia Data 18 noiembrie 2017 12:45:00
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

int N, K, C[16001], mi, lo, r;
long hi;

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

int transport (int M, int K, int C[16001], int mi) {
    int cam=0, drum=0, i=1;
    while (M) {
        int plin = 0;
        cam=0;
        //while (i<=N && cam<mi){
        //    if (cam+=C[i]<=mi) {cam+=C[i];
        //    i++;
        //    M--;}
        while (plin==0 && i<=N) {
            if (cam+C[i]<=mi){cam+=C[i]; i++; M--;}
            else plin=1;
        }
        drum++;
        }
    if (drum<=K) return 1;
    else return 0;
}

int main()
{
     f>>N>>K;
    for (int i=1; i<=N; i++) {
        f>> C[i];
        if (C[i]>lo) lo=C[i];
        hi+=C[i];
    }
    while (lo<=hi) {
        mi=(lo+hi)/2;
        if (transport(N,K,C,mi)) {r=mi; hi=mi-1;}
        else lo=mi+1;
    }
    g<<r;
    f.close();
    g.close();
    return 0;
}