Cod sursa(job #1002845)

Utilizator CosminnnChirica Cosmin Cosminnn Data 28 septembrie 2013 22:14:32
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <cstdio>
using namespace std;

int n,k,s;
int v[16010];

inline void Read()
{
    int i;
    s = 0;
    FILE *f = fopen("transport.in","r");
    fscanf(f,"%d %d",&n,&k);
    for( i = 1; i<= n;++i)
    {
        fscanf(f,"%d",&v[i]);
        s+=v[i];
    }
    fclose(f);
}

inline bool Posibil(int nr)
{
    int i,capacity = nr,nrtransp = 0;
    for( i = 1; i<=n ;++i )
    {
        if(capacity - v[i] >= 0)
            capacity -= v[i];
        else
        {
            ++nrtransp;
            capacity = nr - v[i];
        }
    }
    ++nrtransp;
    if( nrtransp <= k )
        return true;
    return false;
}

inline void Bsearch()
{
    int i,maxim=v[1],st,dr,mij,sol;

    for( i = 2 ; i <=n ; ++i)
        maxim= max(maxim,v[i]);

    st = maxim;
    dr = s;
    while( st<=dr )
    {
        mij = (st+dr)/2;
        if( Posibil(mij)  )
        {
            sol = mij;
            dr = mij -1;
        }
        else
            st = mij+1;

    }
    FILE *g = fopen("transport.out","w");
    fprintf(g,"%d ",sol);
    fclose(g);
}

int main()
{
    Read();
    Bsearch();
    return 0;
}