Pagini recente » Cod sursa (job #2980079) | Cod sursa (job #3255569)
#include <fstream>
#define CMAX 256000000
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, k, v[16001], cmin=CMAX;
long long st, vmax;
int nrTransporturi(int c)
{
int nr=1, suma=0;
int i=1;
//fout<<"calculam numar de transporturi pentru capacitatea "<<c<<"\n";
while(i<=n)
{
if(suma+v[i]<=c)
{
suma=suma+v[i];
}
else
{
nr++;
suma=v[i];
}
i++;
}
//fout<<nr<<"\n";
return nr;
}
int main()
{
fin>>n>>k;
for(int i=1; i<=n; i++)
{
fin>>v[i];
st=st+v[i];
if(v[i]>vmax) vmax=v[i];
}
fin.close();
//cautare binara a capacitatii intre valorile vmax si st
long long stanga=vmax, dreapta=st;
while(stanga<=dreapta)
{
int mij=(stanga+dreapta)/2;
int nrt=nrTransporturi(mij);
if (nrt<=k)
{
if(mij<cmin)
{
cmin=mij;
//fout<<"capacitate minima "<<cmin<<"\n";
dreapta=mij-1;
}
}
else
{
stanga=mij+1;
}
}
fout<<cmin;
return 0;
}