Cod sursa(job #1723712)

Utilizator BlackNestaAndrei Manaila BlackNesta Data 1 iulie 2016 14:09:19
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, k, a[16050];

inline bool Verifica(int cap)
{
///aceasta functie verifica daca se pot transporta
///toate saltelele intr-un camion cu capacitatea cap
///intr-un nr de transporturi <= k
    int c, s, i;
    c = k;
    s = 0;
    for(i = 1; i <= n; i++)
    {
        if(a[i] > cap)
            return true;
        if(s + a[i] > cap)
        {
            c--;
            s = 0;
        }
        s += a[i];
    if(c == 0)
        return true;
    }
    return false;
}

void Cauta()
{
///caut cel mai mic camion ce poate tranporta toate
///saltelele in cel mult k drumuri
    int p = 16001 * 16001;
    int pp = 0;
    while(p >= 1)
    {
        if(Verifica(p + pp))
            pp += p;
        p /= 2;
    }
    pp++;
    g << pp << "\n";
}

int main()
{
    f >> n >> k;
    for(int i = 1; i <= n; i++)
        f >> a[i];
    f.close();
    Cauta();
    g.close();
    return 0;
}