Cod sursa(job #1248720)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 25 octombrie 2014 21:08:54
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
#include <math.h>

using namespace std;

unsigned long int n,k,v[16002],s,d,j;
FILE *f;

bool se_poate(unsigned long int m,unsigned long int t)
{
    unsigned long int tr=1,i=1,s=0;
    while((tr<=t)&&(i<=n))
        if(m==s+v[i]){s=0;tr++;i++;}
        else if(m>s+v[i]){s+=v[i];i++;}
        else if(m<s+v[i]){s=0;tr++;}
    if(i>n)
        return true;
    return false;
}

int main()
{
    f=fopen("transport.in","r");
    fscanf(f,"%ld %ld",&n,&k);
    s=INFINITY;
    d=0;
    for(j=1;j<=n;j++)
    {
        fscanf(f,"%ld",&v[j]);
        d+=v[j];
        if(s>v[j])
            s=v[j];
    }
    fclose(f);
    while (s!=d)
    {
        if(se_poate((s+d)/2,k))
            d=(s+d)/2;
        else
            s=(s+d)/2+1;
    }
    f=fopen("transport.out","w");;
    fprintf(f,"%ld",s);
    fclose(f);
    return 0;
}