Cod sursa(job #1248620)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 25 octombrie 2014 17:31:07
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 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 j=1,i=1;
    while((i<=t)&&(j<=n))
        if(v[j]==m*i){i++;j++;}
        else if(v[j]<m*i)j++;
        else if(v[j]>m*i)i++;
    if(j>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;
}