Pagini recente » Cod sursa (job #354461) | Cod sursa (job #1336292) | Cod sursa (job #12520) | Cod sursa (job #20555) | Cod sursa (job #2793713)
#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=v[0];
int nr=1;
for(int i=1;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,result;
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;
result = nrTransport(mid);
if(result>k)
{
left=mid +1;
}
else if (result < k)
{
right = mid-1;
}
else
{
sol = min(sol,mid);
right= mid-1 ; /// check a smaller capacity
}
}
cout<<sol;
return 0;
}