Pagini recente » Rating Alexandru Stan (angrybeaver) | Cod sursa (job #2810674) | Cod sursa (job #3296754)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
bool este_solutie(int x, int n, int k, int volume[])
{
int vol_transport=0, kaux=1;
for(int i=0; i<n; i++)
{
if(vol_transport+volume[i]<=x)
{
vol_transport=vol_transport+volume[i];
}
else
{
kaux++;
if(kaux>k)
{
return false;
}
vol_transport=0;
vol_transport=vol_transport+volume[i];
}
}
return true;
}
int cautare_binara(int solutii[], int nrsol, int volume[], int n, int k)
{
int st, dr, m, sol=-1;
st=0;
dr=nrsol-1;
while(st<=dr)
{
m=(st+dr)/2;
if(este_solutie(solutii[m], n, k, volume))
{
sol=solutii[m];
//fout<<st<<" "<<dr<<" "<<m<<" "<<solutii[m]<<" "<<sol<<endl;
dr=m-1;
}
else
{
st=m+1;
}
}
return sol;
}
int main()
{
int n, k, v, vol_max=-1, vol_sum=0, aux, nrsol, c;
fin>>n>>k;
int volume[n];
for(int i=0; i<n; i++)
{
fin>>volume[i];
if(volume[i]>vol_max)
{
vol_max=volume[i];
}
vol_sum=vol_sum+volume[i];
}
nrsol=vol_sum-vol_max+1;
int solutii[nrsol];
aux=vol_max;
for(int i=0; i<nrsol; i++)
{
solutii[i]=aux;
aux++;
}
/*
cout<<vol_max<<" "<<vol_sum<<" "<<nrsol<<endl;
for(int i=0; i<nrsol; i++)
{
cout<<solutii[i]<<" ";
}
*/
c=cautare_binara(solutii, nrsol, volume, n, k);
fout<<c;
fin.close();
fout.close();
return 0;
}