Pagini recente » Cod sursa (job #1725536) | Cod sursa (job #232040) | Cod sursa (job #1147466) | Cod sursa (job #396593) | Cod sursa (job #1307779)
#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 (A[dr+1]<val+x) dr++;
return cautare_binara(val, pas+1, x+A[dr], st+1);
}
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';
}