Cod sursa(job #642321)

Utilizator penultim_oVijiala Tudor Gabriel penultim_o Data 30 noiembrie 2011 23:28:25
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
using namespace std;
#define INT unsigned int
INT a[16001],n,k;

INT rez(INT c)
{
    INT i,t,r=0;
    for(i=0;i<n;i++)
    {
        if(a[i]>c) return 0;
        t = a[i];
        r++;
        while(t+a[i+1]<=c&&i<n)
        {
            i++;
            t+=a[i];
        }
    }
    return r;
}


INT cauta(INT min, INT max)
{
    INT m,r=0;
    m = (min + max)/2;
    while(min<max)
    {
        r = rez(m);
        if(k>r) max = m - 1;
        if(k<r) min = m + 1;
        m = (min + max)/2;
        if(r==k)
        {
            while(rez(m-1)==k) m--;
            return m;
        }
    }
    return 0;

}

int main()
{
    ifstream in("transport.in");
    ofstream out("transport.out");
    INT i,max=0;
    in >> n >> k;
    for(i=0;i<n;i++)
    {
        in >> a[i];
        max = (max > a[i] ? max : a[i]);
    }

    out << cauta(max,max*n/k+1);

    return 0;
}