Pagini recente » Monitorul de evaluare | Cod sursa (job #1387197) | Cod sursa (job #1542828) | Cod sursa (job #2197509) | Cod sursa (job #2954675)
#include <fstream>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int v[16006];
int n, k;
bool check(int cap)
{
int i=1;
int cam=0;
int sum=0;
while(i <= n && cam <= k)
{
sum+=v[i];
if(v[i] > cap)
return false;
if(sum > cap)
{
sum=v[i];
cam++;
}
i++;
}
if(sum > 0)
cam++;
cout<<cap<<" "<<cam<<'\n';
if(cam <= k)
return true;
return false;
}
int main()
{
cin>>n>>k;
for(int i=1; i<=n; i++)
{
cin>>v[i];
}
int ans;
int st, dr, mid;
st=1; dr=16000*16000;
while(st <= dr)
{
mid=(st+dr)/2;
if(check(mid))
{
ans=mid;
dr=mid-1;
}
else
{
st=mid+1;
}
}
cout<<ans;
return 0;
}