Pagini recente » Cod sursa (job #230935) | Cod sursa (job #2216090) | Cod sursa (job #798636) | Cod sursa (job #2047950) | Cod sursa (job #130015)
Cod sursa(job #130015)
#include <stdio.h>
#include <stdlib.h>
int num[16001];
int n, k;
long min = 16001;
int number(int l)
{
int res = 0;
int s = 0;
for(int i=0;i<n;++i)
{
if(s+num[i] <= l)
{
s += num[i];
}
else
{
++res;
s = num[i];
}
}
if(s>0)
res++;
return res;
}
void process(long a, long b)
{
if(a>b)
return;
long p = (a+b)/2;
int r = number(p);
if(r<=k)
{
if(p<min)
min = p;
if(p<b)
process(a, p);
else
process(a, p-1);
}else
{
if(a<p)
process(p, b);
else
process(p+1, b);
}
}
int main(void)
{
FILE* fin;
FILE* fout;
fin = fopen("transport.in", "r");
fout = fopen("transport.out", "w");
fscanf(fin, "%d %d\n", &n, &k);
long max = 0;
long sum = 0;
for(int i=0;i<n;++i)
{
int a;
fscanf(fin,"%d\n", &a);
num[i] = a;
sum += a;
if(a>max)
max = a;
}
min = sum;
process(max, sum);
fclose(fin);
fprintf(fout, "%ld\n", min);
fclose(fout);
return 0;
}