Pagini recente » Cod sursa (job #445037) | Cod sursa (job #2080986) | Cod sursa (job #60428) | Viata de dupa olimpiade (III) - Startup | Cod sursa (job #2077358)
#include <cstdio>
using namespace std;
FILE *in,*out;
const int nmax = 16005;
int v[1+nmax];
int n,k;
int verifica(int x)
{
int sum = 0,tr = 0;
for(int i = 1;i <= n;i ++)
{
if(v[i] > x)
return k+2;
sum += v[i];
if(sum > x)
{
sum = v[i];
tr ++;
}
}
if(sum != 0)
tr ++;
return tr;
}
int cautbin()
{
int r = 0,pas = 1 << 30;
while(pas)
{
if(verifica(r+pas) > k)
r += pas;
pas >>= 1;
}
return r+1;
}
int main()
{
in = fopen("transport.in","r");
out = fopen("transport.out","w");
fscanf(in,"%d %d",&n,&k);
for(int i = 1;i <= n;i ++)
fscanf(in,"%d",&v[i]);
int sol = cautbin();
fprintf(out,"%d",sol);
return 0;
}