Pagini recente » Cod sursa (job #1672880) | Cod sursa (job #2951376) | Cod sursa (job #3214735) | Cod sursa (job #2812520) | Cod sursa (job #2109800)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
long long int n, k, volum[16050];
long long int lg = 1, suma[16050];
bool transpo(long long int x)
{
long long int s, i, lg1;
long long int poz = 0;
bool ok = 0;
for(int aux = 0; aux<k; aux++)
{
s = x;
i = 0;
lg1 = lg;
for(; lg1!=0; lg1>>=1)
if(suma[i+lg1]<=suma[n] && suma[i+lg1]-suma[poz]<=s)
i+=lg1;
if(i!=n)
{
poz = i;
}
if(i == n)
{
ok = 1;
break;
}
}
return ok;
}
void log()
{
long long int i = suma[n]/k;
for(; i<suma[n]; i++)
if(transpo(i) == 1)
{
printf("%lld", i);
return;
}
}
void rez()
{
suma[0] = 0;
for(int i = 1; i<=n; i++)
{
scanf("%lld\n", &volum[i]);
suma[i] = suma[i-1]+volum[i];
}
while(lg<n)
lg=(lg<<1);
for(int i = n+1; i<=lg; i++)
suma[i] = 256000050;
log();
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%lld %lld\n", &n, &k);
rez();
return 0;
}