Pagini recente » Cod sursa (job #2026286) | Cod sursa (job #1894006) | Cod sursa (job #240841) | Cod sursa (job #2288619) | Cod sursa (job #1307770)
#include <iostream>
#include<fstream>
using namespace std;
#define maxn 16000
int N, K, A[maxn];
void citeste()
{
ifstream f("transport.in");
int i, x;
f>>N>>K;
for (i=1;i<=N;i++) {f>>x; A[i]=A[i-1]+x;}
}
int cautare_binara(int val, int pas, int x, int li)
{
if (li>=N && pas<K) return 1;
if (pas>=K) return 0;
int st, dr, m; //caut binar val + x
st=li; dr=N;
while (st<dr)
{
m=(st+dr)/2;
if (A[m]>val+x) dr=m-1;
else st=m+1;
}
if (st>li && A[st]>val+x) st--;
return cautare_binara(val, pas+1, x+A[st], st+li);
}
int main()
{
citeste();
int l, r, m, minim=A[N]+1;
l=A[1]; r=A[N];
while(l<=r)
{
m=(l+r)/2;
if (cautare_binara(m, 0, 0, 1)) { if (m<minim) minim=m; r=m-1; }
else l=m+1;
}
ofstream g("transport.out");
g<<minim<<'\n';
}