Pagini recente » Cod sursa (job #2990900) | Cod sursa (job #384468) | Cod sursa (job #2007217) | Cod sursa (job #307546) | Cod sursa (job #2625313)
#include <bits/stdc++.h>
using namespace std;
ofstream fout ("transport.out");
int a[16005], n, k;
void Citire()
{
ifstream fin ("transport.in");
int i;
fin >> n >> k;
for (i=1; i<=n; i++)
fin >> a[i];
fin.close();
}
///returneaza 1 daca sirul se poate imparti in cel
///mult k secvente de suma L
int Imparte (int L)
{
int s, i, secv;
s=0;
secv=1;
for (i=1; i<=n; i++)
{
if (a[i]>L) return 0;
s+=a[i];
if (s>L)
{
secv++;
s=a[i];
}
}
if (secv<=k) return 1;
return 0;
}
int CautBin ()
{
int st, dr, poz, m;
st=1;
dr=256000000;
poz=0;
while (st<=dr)
{
m=(st+dr)/2;
if (Imparte(m)==1)
{
poz=m;
dr=m-1;
}
else st=m+1;
}
return poz;
}
int main()
{
int x;
Citire();
x=CautBin();
fout << x <<"\n";
fout.close();
return 0;
}