Cod sursa(job #1248706)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 25 octombrie 2014 20:50:21
Problema Transport Scor 90
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[16000],s,d,j;
FILE *f;

bool se_poate(unsigned long int m,unsigned long int t)
{
    unsigned long int i=1,k=1,s=0;
    while((i<=t)&&(k<=n))
        if(m==s+v[k]){s=0;i++;k++;}
        else if(m>s+v[k]){s+=v[k];k++;}
        else if(m<s+v[k]){s=0;i++;}
    if(k>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;
}