Pagini recente » Cod sursa (job #842442) | Cod sursa (job #3155946) | Cod sursa (job #38447) | Cod sursa (job #2133500) | Cod sursa (job #1260382)
#include <stdio.h>
FILE *fin, *fout;
int *p;
int main()
{
fin = fopen("transport.in", "r");
fout = fopen("transport.out", "w");
int n, m, dr = 0, st = 0, last = 0;
fscanf(fin, "%d %d", &n, &m);
p = new int[n];
for(int i = 0; i< n; i++)
{
fscanf(fin, "%d", &p[i]);
if(p[i] > st) st = p[i];
dr += p[i];
}
int mij, s = 0, count = 0, ans;
while(1)
{
mij = (st+dr)/2;
count = 0;s = 0;
for(int i =0; i< n; i++)
{
if(s + p[i] <= mij) s+=p[i];
else
{
s = p[i];
count++;
}
}
if(s <= mij) count++;
else count+=2;
if(count > m) st = mij+1;
if(count <= m) {dr = mij;ans = mij;}
if(mij == last)
{
mij = ans;
break;
}
last = mij;
}
fprintf(fout, "%d\n", mij);
return 0;
}