Pagini recente » Cod sursa (job #81286) | Cod sursa (job #2383586) | Cod sursa (job #749352) | Cod sursa (job #1983693) | Cod sursa (job #2064420)
#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;
}