Pagini recente » Cod sursa (job #2768559) | Cod sursa (job #2125286) | Cod sursa (job #2338583) | Cod sursa (job #804292) | Cod sursa (job #1797161)
#include <stdio.h>
#include <limits.h>
#define MAXN 16001
int v[MAXN];
int cautareBinara(int x , int n , int i , int j){
int k;
while(i < j){
k = (i + j) / 2;
if(x < k)
j = k - 1;
else
if(x > k)
i = k + 1;
else
return k;
}
return -1;
}
int check(int x , int n , int k){
int k1 = 0 , i , x1 = x;
for(i = 1;i <= n; ++i){
if(x1 - v[i] >= 0)
x1 = x1 - v[i];
else
{
++k1;
x1 = x;
x1 = x1 - v[i];
}
if(x1 == 0){
++k1;
x1 = x;
}
}
if(k1 < k)
return 1;
return 0;
}
int main()
{
int i , k , n , sum = 0 , left , right , x , min = INT_MAX , max = 0;
FILE *f,*g;
f=fopen("transport.in","r");
g=fopen("transport.out","w+");
fscanf(f,"%d %d",&n,&k);
for(i = 1;i <= n; ++i){
fscanf(f,"%d",&v[i]);
sum = sum + v[i];
if(v[i] > max)
max = v[i];
}
left = max;
right = sum;
while(left < right){
x = (left + right) / 2;
if(check(x , n , k)){
if(x < min)
min = x;
if(check(x - 1, n , k) == 1)
min = x - 1;
right = x - 1;
}
else{
left = x + 1;
}
}
if(n == 1)
fprintf(g,"%d",max);
else
fprintf(g,"%d",min);
}