Pagini recente » Profil TiberiuPuican | Cod sursa (job #481856) | Cod sursa (job #493043) | autumn-warmup-2007/runda-1/solutii | Cod sursa (job #1052912)
#include<iostream>
#include<fstream>
using namespace std;
int a[1601], k, n;
int correct(int x)
{
int i = 1, j = 1, d = x;
while (j <= n && x >= a[j])
{
d -= a[j];
if (d < 0){ d = x; i++; }
else j++;
}
if (x < a[j] && j <= n) return k + 1;
return i;
}
int bynar(int l, int r)
{
int m, c, d;
while (l != r)
{
m = (l + r) / 2;
c = correct(m);
if (c == k) d = m;
if (c <= k) r = m;
else { l = m + 1; }
}
c = correct(m);
if (c) return l;
return d;
}
int main()
{
ifstream fin("transport.in");
ofstream fout("transport.out");
fin >> n >> k;
int suma = 0;
for (int i = 1; i <= n; i++)
{
fin >> a[i];
suma += a[i];
}
fout << bynar(1, suma);
}