Cod sursa(job #1004675)

Utilizator acomAndrei Comaneci acom Data 3 octombrie 2013 14:37:50
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<cstdio>
#include<climits>
using namespace std;
#define NMAX 16000
int n,k,v[NMAX+5],st=1,dr=INT_MAX,mij;
int urm(int p, int K)
{
    int i,s=0;
    for (i=p;i<=n;++i)
        {
            s+=v[i];
            if (s>K) return i-1;
        }
    return n;
}
bool verif(int K)
{
    int i=1,val,nr=0;
    while (i<=n)
        {
            val=urm(i,K);
            if (val<i) return false;
            else ++nr, i=val+1;
        }
    if (nr<=k) return true;
    else return false;
}
int main()
{
    int i;
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    for (i=1;i<=n;++i)
        scanf("%d",&v[i]);
    while (st<=dr)
        {
            mij=(st+dr)/2;
            if (verif(mij)) dr=mij-1;
            else st=mij+1;
        }
    printf("%d\n",dr+1);
    return 0;
}