Pagini recente » Istoria paginii utilizator/catrinescualex | Monitorul de evaluare | Cod sursa (job #1887740) | Istoria paginii runda/lasm_baraj2-11-12 | Cod sursa (job #1007956)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int nmax= 16000;
int n, k;
int v[nmax+1];
int mx= 0, ts= 0;
int check(int s)
{
int i= 1, d= 0;
while ( i<=n ) {
int aux= 0;
while ( aux<=s ) {
aux+= v[i];
++i;
}
aux-=v[--i];
++d;
}
return d;
}
int bs( )
{
int i, step, sol= ts;
for ( step= 1; step<=ts; step*=2 );
for ( i= ts; step; step/=2 ) {
if ( i-step>=mx && check(i-step)<=k ) {
sol= i-step;
i-= step;
}
}
return sol;
}
int main( )
{
fin>>n>>k;
for ( int i= 1; i<=n; ++i ) {
fin>>v[i];
if ( v[i]>mx ) {
mx= v[i];
}
ts+= v[i];
}
int sol= bs();
fout<<sol<<"\n";
return 0;
}