Pagini recente » Cod sursa (job #1997476) | Cod sursa (job #3151551) | Cod sursa (job #1508418) | Cod sursa (job #2289806) | Cod sursa (job #2070992)
#include <stdio.h>
#include <stdlib.h>
#define Nmax 16003
int Calculare_transporturi(int s,int n,int v[])
{
int i,transporturi=1,suma=0;
for (i=1;i<=n;i++)
{if (suma+v[i]<=s) suma+=v[i];
else {suma=v[i];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,pas;
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+1,k,n,v);
pas=p/2;
while (pas>=1)
{while (Calculare_transporturi(p-pas,n,v)==k) p--;
pas/=2;
}
fprintf(g,"%d",p);
fclose(g);
return 0;
}