Pagini recente » Cod sursa (job #1801489) | Cod sursa (job #371919) | Cod sursa (job #649047) | Cod sursa (job #516346) | Cod sursa (job #132138)
Cod sursa(job #132138)
/*Caut binar rezultatul pe intervalul [max,s], unde max-maximul din sir, iar s-suma elementelor.*/
#include<stdio.h>
FILE*f=fopen("transport.in","r");
FILE*g=fopen("transport.out","w");
int n,s,k,max, a[16003];
void read()
{
fscanf(f,"%d %d",&n,&k);
for(int i=1;i<=n;++i)
{
fscanf(f,"%d",a+i);
s+=a[i];
if(a[i]>max) max=a[i];
}
}
int ok(int x)
{
int i=1,j=0,s;
while(i<=n)
{
s=0;
while(s<x && i<=n) { s+=a[i]; ++i; }
if(s>x) --i;
++j;
if(j>k) return 0;
}
return 1;
}
int binary_search(int i, int j)
{
int m;
while(i<=j)
{
m=(i+j)/2;
if(ok(m))
{
if(!(ok(m-1))) return m;
else j=m-1;
}
else i=m+1;
}
return 0;
}
int main()
{
read();
int sol;
sol=binary_search(max,s);
fprintf(g,"%d\n",sol);
return 0;
}