Mai intai trebuie sa te autentifici.
Cod sursa(job #2064421)
| Utilizator | Data | 12 noiembrie 2017 12:37:00 | |
|---|---|---|---|
| Problema | Transport | Scor | 40 |
| Compilator | c | Status | done |
| Runda | Arhiva de probleme | Marime | 0.99 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(p-1,n,v)==k) p--;
fprintf(g,"%d",p);
fclose(g);
return 0;
}
