Cod sursa(job #494026)

Utilizator ioanabIoana Bica ioanab Data 20 octombrie 2010 14:59:07
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>

using namespace std;

int v[1<<14],n,k;
 
int bs(int x)
{
    int i,pas=1<<16;
    for (i=0;pas;pas>>=1)
        if (i+pas<=n && v[i+pas]<=x)
            i+=pas;
    return i;
}
bool ok(int x)
{
    int i,j;
    for (i=0,j=1;j<=k && i<=n;j++)
        i=bs(v[i]+x);
	return i==n;
}
 
int bsearch()
{
    int i,pas;
	pas=1<<28;
    for (i=0;pas;pas>>=1)
        if (!ok(i + pas))
            i+=pas;
    return i+1;
}
 
int main()
{
	freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
	int i;
    for(i=1;i<=n;++i)
    {
        scanf("%d",v+i);
        v[i]+=v[i-1];
    }
	
	i=bsearch();

    printf("%d",i);
    return 0;
}