Cod sursa(job #967105)

Utilizator usermeBogdan Cretu userme Data 27 iunie 2013 09:57:25
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>

int v[16001];

int n,k;

bool tr(int c){
    int s=0,t=0;
    for ( int i=1;i<=n;++i ){
        if ( v[i]>c )return 0;
        if ( s+v[i]>=c ){s=0;++t;}
        s+=v[i];
    }
    if ( t<=k )return 1;
    return 0;
}


int main()
{
    FILE*f=fopen("transport.in","r");
    FILE*h=fopen("transport.out","w");
    int s=0;
    fscanf(f,"%d%d",&n,&k);
    for ( int i=1;i<=n;++i ){
        fscanf(f,"%d",&v[i]);
        s+=v[i];
    }
    int p=0;
    for ( int pas=1<<26;pas;pas/=2 ){
        if ( p+pas>s )continue;
        if ( !tr(p+pas) )p+=pas;
    }
    while ( tr(p) )--p;
    fprintf(h,"%d",p+1);
    return 0;
}