diff --git a/src/apple.c b/src/apple.c index 766d543..5e73654 100644 --- a/src/apple.c +++ b/src/apple.c @@ -11,7 +11,28 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - + lb = 0; + ub = 0; + for(i = 0; i < n ;i++){ + ub = ub + A[i]; + } + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + int real_bags = 0; + for(i = 0; i < n; i++){ + if(A[i] % mid == 0){ + real_bags = real_bags + A[i] / mid; + }else{ + real_bags = real_bags + A[i] / mid + 1; + } + } + if(real_bags <= k){ + ub = mid; + }else{ + lb = mid; + } + } + printf("%d\n", ub); return 0; } diff --git a/src/array.c b/src/array.c index 13ed925..2d9e5b0 100644 --- a/src/array.c +++ b/src/array.c @@ -7,12 +7,21 @@ int A[100000]; int main(){ int i, lb, ub; - scanf("%d%d", &n, &k); + scanf("%d %d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - + lb = 0; + ub = n; + while(ub - lb > 1){ + int mid = (ub + lb) / 2; + if(A[mid] >= k){ + ub = mid; + }else{ + lb = mid; + } + } + printf("%d\n", ub); return 0; } diff --git a/src/spear.c b/src/spear.c index 766d543..1e964fc 100644 --- a/src/spear.c +++ b/src/spear.c @@ -11,7 +11,30 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - + lb = -1; + ub = 1; + for(i = 0; i < n; i++){ + if(ub <= A[i]){ + ub = A[i] + 1; + } + } + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(mid == 0){ + lb = mid; + break; + } + int spear_count = 0; + for(i = 0; i < n; i++){ + spear_count = spear_count + A[i] / mid; + } + if(spear_count >= k){ + lb = mid; + }else{ + ub = mid; + } + } + printf("%d\n", lb); return 0; } diff --git a/src/works.c b/src/works.c index 766d543..b4b08a9 100644 --- a/src/works.c +++ b/src/works.c @@ -11,7 +11,41 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - + lb = 0; + ub = 0; + for(i = 0; i < n; i++){ + ub = ub + A[i]; + if(lb < A[i]){ + lb = A[i]; + } + } + lb = lb - 1; + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + int completed_work = 0; + for(i = 0; i < k; i++){ + int works = 0; + for(int j = completed_work; j < n; j++){ + works = works + A[j]; + if(works > mid){ + completed_work = j; + break; + } + if(j == n - 1){ + completed_work = n; + break; + } + } + if(completed_work == n){ + ub = mid; + break; + } + } + if(completed_work < n){ + lb = mid; + } + } + printf("%d\n", ub); return 0; }