diff --git a/src/apple.c b/src/apple.c index 766d543..d94878d 100644 --- a/src/apple.c +++ b/src/apple.c @@ -1,9 +1,16 @@ #include - int n; int k; int A[100000]; +int p(int m){ + unsigned int i, s; + s = 0; + for(i = 0; i < n; i++){ + s = s + A[i] /m; + } + return s < k; +} int main(){ int i, lb, ub; @@ -13,5 +20,17 @@ int main(){ } + lb = 0; + ub = 1000000000; + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(p(mid)){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n", ub); return 0; -} +} \ No newline at end of file diff --git a/src/array.c b/src/array.c index 13ed925..c45ded7 100644 --- a/src/array.c +++ b/src/array.c @@ -12,7 +12,19 @@ int main(){ scanf("%d", &A[i]); } - + lb = -1; + ub = n; + while (ub - lb > 1){ + int mid = (lb + ub) / 2; + if(A[mid] < k) {lb = mid; + + } + else {ub = mid; + + } + } + printf("%d", ub); + return 0; } diff --git a/src/spear.c b/src/spear.c index 766d543..44399f0 100644 --- a/src/spear.c +++ b/src/spear.c @@ -1,17 +1,37 @@ #include - int n; int k; int A[100000]; +int p(int x){ + int s = 0; + for(int i = 0; i < n; i++){ + s = s + A[i] / x; +} +return (int) s < k; +} -int main(){ - int i, lb, ub; - scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ - scanf("%d", &A[i]); - } + int main(){ + int i, lb, ub; + scanf("%d%d", &n, &k); + for(i = 0; i < n; i++){ + scanf("%d", &A[i]); + } + + lb = 0; + ub = 1000000000; + while (ub - lb > 1){ + int mid = (ub + lb) / 2; + if(p(mid)){ + ub = mid; + } + else{ + lb = mid; + } + } - return 0; -} + printf("%d",lb); + + return 0; +} \ No newline at end of file diff --git a/src/works.c b/src/works.c index 766d543..4600a95 100644 --- a/src/works.c +++ b/src/works.c @@ -1,9 +1,24 @@ #include - int n; int k; int A[100000]; +int p(int m){ + int k_need = 1; + int sum = 0; + for(int i = 0; i < n; i++){ + if(A[i] > m){ + return 0; + }else if(sum + A[i] <= m){ + sum = sum + A[i]; + }else{ + k_need++; + sum = A[i]; + } + } + return k_need <= k; +} + int main(){ int i, lb, ub; @@ -11,7 +26,18 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } + lb = 0; + ub = 1000000000; + while(ub - lb > 1){ + int mid = (ub + lb) / 2; + if(p(mid)){ + ub = mid; + }else{ + lb = mid; + } + } + printf("%d", ub); return 0; -} +} \ No newline at end of file