Cod sursa(job #1622402)

Utilizator loo_k01Luca Silviu Catalin loo_k01 Data 1 martie 2016 11:23:28
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;
int a[16005],n,k;
void Citire()
{
    int i;
    ifstream fin ("transport.in");
    fin >> n >> k;
    for(i=1; i<=n; i++)
        fin >> a[i];
    fin.close();
}

///Returneaza 1 daca sirur se poate imparti
/// in cel mult k secvente de suma L
int Imparte(int L)
{
    int i, suma = 0,secv=1;

    for(i=1; i<=n; i++)
    {
        if(a[i]>L)return 0;
        suma+=a[i];
        if(suma > L)
        {
            secv++;
            suma = a[i];
        }
    }
    if(secv<=k)return 1;
        return 0;
}

int CautBin()
{
    int st, dr, m, poz;
    st = 1; dr = 256000000; poz = 0;
    while (st <= dr)
    {
        m = (st + dr) / 2;
        if (Imparte(m)==1)
        {
            poz = m;
            dr = m - 1;
        }
        else st = m + 1;
    }
    return poz;
}


int main()
{
    int x;
    ofstream fout("transport.out");
    Citire();

    x=CautBin();

    fout << x << "\n";
    fout.close();

    return 0;
}