Pagini recente » Cod sursa (job #169398) | Cod sursa (job #1558137) | Cod sursa (job #2113211) | Cod sursa (job #745382) | Cod sursa (job #2793762)
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
#define ull unsigned long long
const int DIM=16002;
int n,k;
int v[DIM]={0};
int nrTransport(int capacitate){
ull s=0;
int nr=1;
for(int i=0;i<n;i++){
if(s+v[i]<=capacitate){ /// can we take another box ?
s+=v[i];
}
else{
s=v[i]; /// reset
nr++;
}
}
return nr;
}
int main()
{
int maxSaltea=0,sol=99999,resultNrTransport;
ull sumTotalSaltea=0;
int left,right,mid;
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>v[i];
maxSaltea=max(maxSaltea,v[i]);
sumTotalSaltea+=v[i];
}
left = maxSaltea;
right = sumTotalSaltea;
while(left<=right)
{
mid = (left+right)/2;
resultNrTransport = nrTransport(mid);
if(resultNrTransport>k)
{
left=mid +1;
}
else if (resultNrTransport < k)
{
right = mid-1;
}
else
{
sol = min(sol,mid);
right= mid-1 ; /// check a smaller capacity
}
}
cout<<sol;
return 0;
}