Pagini recente » Cod sursa (job #2148270) | Cod sursa (job #3126534) | Cod sursa (job #1320662) | Cod sursa (job #930378) | Cod sursa (job #529725)
Cod sursa(job #529725)
#include <fstream>
#include <iostream>
#define Nmax 16005
using namespace std;
long long sol = Nmax * Nmax;
int n, k, v[Nmax];
int valid(int mid)
{
int c = 0, j = 1, i;
while(c < k && j <= n)
{
long long S = 0;
for(i = j; S < mid && i <= n; ++i)
S += v[i];
--i;
if(S > mid)
{
S -= v[i];
--i;
}
++c;
j = i + 1;
}
if((j - 1) == n && c <= k)
return 1;
return 0;
}
int bin_search(int st, int dr)
{
while(st < dr)
{
int mid = (st + dr) / 2;
if(valid(mid))
{
if(mid < sol)
sol = mid;
dr = mid;
}
else
st = mid + 1;
}
return sol;
}
int main()
{
int max = 0, S = 0;
ifstream f("transport.in");
ofstream g("transport.out");
f >> n >> k;
for(int i = 1; i <= n; ++i)
{
f >> v[i];
S += v[i];
if(max < v[i])
max = v[i];
}
g << bin_search(max, S);
f.close();
g.close();
return 0;
}