Cod sursa(job #1497898)

Utilizator maria.nastaseNastase Maria maria.nastase Data 7 octombrie 2015 19:17:35
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
#include <cstdlib>
using namespace std;

int v[16005];
int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    int n, k, maxim=0, minim=0, capacitate=0;
    scanf("%d%d",&n,&k);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&v[i]);
        if(v[i]>minim)
            minim=v[i];
        maxim+=v[i];
    }
    while(minim<=maxim)
    {
        int trans=0, s=0, m;
        m=(minim+maxim)/2;
        for(int i=1; i<=n; i++)
        {
            s+=v[i];
            if(i==n)
            {
                if(s>m)
                    trans+=2;
                else
                    trans+=1;
            }
            else
            {
                if(s>m && s==v[i])
                {
                    trans=k+1;
                    break;
                }
                else
                {
                    if(s>m)
                    {
                        s=v[i];
                        trans++;
                    }
                }
            }
        }
        if(trans<=k)
        {
            capacitate=m;
            maxim=m-1;
        }
        else
            minim=m+1;
    }
    printf("%d",capacitate);
    return 0;
}