Pagini recente » Cod sursa (job #1906724) | Cod sursa (job #2765479) | Cod sursa (job #578117) | Cod sursa (job #863496) | Cod sursa (job #2256934)
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
int teszt(int meret, int N, int *t)
{
int fuvar = 0, matracok = 0;
for(int i = 0; i < N; i ++)
{
if(matracok + t[i] >= meret)
{
fuvar ++;
matracok = t[i];
}
else matracok += t[i];
}
return fuvar + 1;
}
int main()
{
freopen("transport.in","rt",stdin);
freopen("transport.out","wt",stdout);
int N, K, t[16000]= {0}, e=0, u, fuvar, meret;
int maxi = INT_MIN;
cin>>N>>K;
u = 16000 * N * 2;
//u = 72;
for(int i = 0; i < N; i ++)
{
cin>>t[i];
if(maxi<t[i])maxi = t[i];
}
if(N<=K)
{
cout<<maxi;
return 0;
}
while(e!=u && (e+1)!=u)
{
meret = (e + u)/2;
fuvar = teszt(meret, N, t);
if(fuvar < K)
{
u = meret;
}
else if(fuvar > K)
{
e = meret;
}
else
{
while(fuvar == K)
{
meret--;
fuvar = teszt(meret, N, t);
}
e=u;
}
}
cout<<meret;
return 0;
}