Pagini recente » Cod sursa (job #3245875) | Cod sursa (job #107774) | Cod sursa (job #919015) | Cod sursa (job #2594344) | Cod sursa (job #3295200)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int d,v[16003],maxi,sum,n;
int numara_drumuri(int capca)
{
int nrd=0,s=0;
for (int i=0; i<n;)
{
///pregatim un drum
while (s+v[i]<=capca)
{
s+=v[i]; /// punem o saltea
i++; /// trecem la urmatoarea saltea
}
nrd++;
s=0;
}
return nrd;
}
int caut_bin(int maxi, int suma)
{
int st=maxi,dr=suma,mj=(st+dr)/2,bestcamion=-1;
while (st<=dr)
{
mj=(st+dr)/2;
if (numara_drumuri(mj) <= d)
{
///am gasit un camion
bestcamion=mj;
dr = mj-1;
}
else
{
/// inseamna ca camionula face prea multe drumuri
///incercam un camion mai mare
st = mj+1;
}
}
return bestcamion;
}
int main()
{
int solutie;
fin>>n>>d;
for (int i=0; i<n; i++)
{
fin>>v[i];
if (v[i] > maxi)
{
maxi=v[i];
}
sum+=v[i];
}
solutie=caut_bin(maxi,sum);
fout<<solutie;
return 0;
}