Pagini recente » Diferente pentru utilizator/mihaipriboi intre reviziile 30 si 29 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1551159) | Cod sursa (job #2257029)
#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;
// u = 32;
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)
{
meret = (e + u)/2;
fuvar = teszt(meret, N, t);
if(fuvar <= K)
{
u = meret;
}
else //if(fuvar > K)
{
e = meret + 1;
}
}
if(teszt(e,N,t)!=K)cout<<e+1;
else cout<<e;
return 0;
}