Pagini recente » Cod sursa (job #2365728) | Cod sursa (job #242073) | Cod sursa (job #601097) | Cod sursa (job #1530724) | Cod sursa (job #2510074)
#include <stdio.h>
#define NMAX 16000
using namespace std;
int n,k;
int v[NMAX+3],maxim;
FILE *fin,*fout;
int c_binar(int st,int dr,int val)
{
int raspuns=st;
int s_stanga=v[st-1];
while(st<=dr)
{
int mij=(st+dr)/2;
if(v[mij]-s_stanga>val)
{
//caut in stanga intervalului
dr=mij-1;
}
else if(v[mij]-s_stanga<val)
{
st=mij+1;
raspuns=mij;
}
else if(v[mij]-s_stanga==val)
{
raspuns=mij;
return raspuns;
}
}
return raspuns;
}
void caut(int val,int &ok)
{
//incerc sa caut binar elementele
int st=1;
for(int incercari=1; incercari<=k; incercari++)
{
st=c_binar(st,n,val)+1;
if(st>=n)
{
//am gasit valoarea minima de care avem nevoie
ok=1;
}
}
}
int main()
{
fin=fopen("transport.in","r");
fout=fopen("transport.out","w");
fscanf(fin,"%d %d",&n,&k);
for(int i=1; i<=n; i++)
{
int x;
fscanf(fin,"%d",&x);
if(x>maxim)
{
maxim=x;
}
v[i]=v[i-1]+x;
}
int ok=0;
//consider ca nu am gasit val minima
int val=maxim;
while(ok==0)
{
caut(val,ok);
val++;
}
fprintf(fout,"%d",val);
return 0;
}