Cod sursa(job #1240397)

Utilizator MarronMarron Marron Data 11 octombrie 2014 11:43:07
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>

#define MAXN 16005

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

int n, k;
int a[MAXN];


bool check(int c)
{
    int s = 0, cont = 0;
    for (int i = 1; i <= n; i++)
    {
        if (s + a[i] > c) {
            s = 0;
            cont++;
        }

        s += a[i];
    }
    cont++;

    if (cont > k) {
        return false;
    } else {
        return true;
    }
}

int main()
{
    f >> n >> k;
    int mn = 0;
    int mx = 0;
    for (int i = 1; i <= n; i++)
    {
        f >> a[i];
        mn = std::max(mn, a[i]);
        mx += a[i];
    }

    if (n == 1) {
        g << a[1] << std::endl;
        return 0;
    }

    int st = mn;
    int dr = mx;
    while (st <= dr)
    {
        int mij = ((st + dr) >> 1);
        if (check(mij) == false && check(mij + 1) == true) {
            g << mij + 1 << std::endl;
            return 0;
        }

        if (check(mij) == false) {
            st = mij + 1;
        } else {
            dr = mij - 1;
        }
    }

    return 0;
}