Cod sursa(job #2064420)

Utilizator gundorfMoldovan George gundorf Data 12 noiembrie 2017 12:35:54
Problema Transport Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <stdlib.h>
#define Nmax 16003

int Calculare_transporturi(int s,int n,int v[])
{
    int i,transporturi=0,suma=0;

    for (i=1;i<=n;i++)
        if (suma+v[i]<=s) suma+=v[i];
    else {suma=v[i];transporturi++;}

    transporturi++;
    return transporturi;
}



int Cautare_Binara_Solutie(int i,int j,int k,int n,int v[])
{
    int mij,s=i,d=j;
    while (s<=d)
    {
        mij=(s+d)/2;
        int p=Calculare_transporturi(mij,n,v);
        if (p==k) return mij;
        else if (k<p) s=mij+1;
        else if (k>p) d=mij-1;
    }
    return -1;
}

int main()
{int n=0,v[Nmax],k,i,s=0;

    FILE *f=fopen("transport.in","r");
    fscanf(f,"%d %d",&n,&k);

    for (i=1;i<=n;i++)
    {fscanf (f,"%d",&v[i]);
    s+=v[i];}

    fclose(f);

    FILE *g=fopen("transport.out","w");


   int p=Cautare_Binara_Solutie (1,s,k,n,v);
   while (Calculare_transporturi(v[p-1],n,v)==k) p--;
   fprintf(g,"%d",p);
   fclose(g);


    return 0;
}