Cod sursa(job #290164)

Utilizator flamecataCiobanu Alexandru-Catalin flamecata Data 27 martie 2009 16:27:34
Problema Transport Scor 100
Compilator cpp Status done
Runda aa Marime 0.94 kb
#include<stdio.h>   
  
int i,n,k, a[16500], max=-1;   
long s=0;   
int greedy (long p)   
{   
    s=0;   
    int sz=1;   
    for(i=1;i<=n;i++)           
        if (s+a[i]<=p)   
            s+=a[i];   
        else   
        {   
            s=0;   
            ++sz;   
            --i;   
        }   
    if (sz<=k) return 1;   
    return 0;   
}   
long binker(long st, long dr)   
{   
long p,x;   
while (st<=dr)      
{   
    p=st +(dr-st)/2;   
if(greedy(p)==1)   
{   
    dr=p-1;   
    x=p;   
}   
else   
    st=p+1;   
}   
return x;   
}   
 int main()   
{      
    freopen("transport.in", "r", stdin);   
    freopen("transport.out", "w", stdout);   
    scanf("%d %d", &n,&k);   
    for(i=1;i<=n;i++)   
    {   
        scanf("%d", &a[i]);   
        s+=a[i];   
        if(a[i]>max)   
            max=a[i];   
    }   
    printf("%ld", binker(max,s));   
    return 0;   
}