Cod sursa(job #1999041)

Utilizator AlexaCatanaCatana Alexandra-Vasilica AlexaCatana Data 10 iulie 2017 02:33:01
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;

int n, k, v[16001];

int valid ( int c, int n, int k, int v[] ) {
    int i;
    for ( i = 1; i <= n; i++ ) {
        int sum = v[i];

        while ( sum < c ) {
            ++i;
            sum += v[i];
        }

        if ( sum > c ) {
            sum -= v[i];
            --i;
        }

        k--;
    }
    if ( k < 0 ) {
        return 0;
    }
    return 1;
}

int main() {

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

    int sum = 0;
    int Max = 0;

    for ( int i = 1; i <= n; i++ ) {
        f>>v[i];
        if ( v[i] > Max ) {
            Max = v[i];
        }
        sum += v[i];
    }

    int l = Max;
    int r = sum;
    int Min = INT_MAX;

    while ( l <= r ) {
        int c = ( l + r ) / 2;
        if ( valid(c, n, k, v) == 1 ) {
            if ( Min > c ) {
                Min = c;
            }
            r = c - 1;
        }
        else {
            l = c + 1;
        }
    }

    g<<Min;

    return 0;
}