Cod sursa(job #2073644)

Utilizator AndreiJJIordan Andrei AndreiJJ Data 23 noiembrie 2017 14:53:43
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
using namespace std;
int a[16005], n, k;
/// cauta daca x apare intr-un vector
/// returneaza cea mai din dreapta pozitie

bool SeImparte (int v)
{
    int i, nrsecv=1, s=0;
    for (i=1; i<=n; i++)
    {
        if(a[i] > v) return false;
        if (s+a[i]<=v) s+=a[i];
        else
        {
            nrsecv++;
            s=a[i];
        }
    }
    if(nrsecv>k) return false;
    return true;
}
int CautBin ()
{
    int st, dr, v, p=-1;
    st=1;
    dr=256000000;
    while (st<=dr)
    {
        v=(st+dr)/2;
        if (SeImparte(v))
        {
            p=v;
            dr=v-1;
        }
        else st=v+1;
    }
    return p;
}
int main()
{
    int i;
    ifstream fin ("transport.in");
    ofstream fout ("transport.out");
    fin >> n >> k;
    for (i=1; i<=n; i++)
        fin >> a[i];
    fout << CautBin();
    fout.close();
    return 0;
}