Cod sursa(job #1248663)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 25 octombrie 2014 19:13:07
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>

using namespace std;

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

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

int main()
{
    f=fopen("transport.in","r");
    fscanf(f,"%ld %ld",&n,&k);
    fscanf(f,"%ld",&v[1]);
    s=v[1];
    for(j=2;j<=n;j++)
    {
        fscanf(f,"%ld",&v[j]);
        v[j]+=v[j-1];
        if(s>v[j])
            s=v[j];
    }
    fclose(f);
    d=v[n];
    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;
}