diff --git a/src/apple.c b/src/apple.c index 766d543..7ea1dd4 100644 --- a/src/apple.c +++ b/src/apple.c @@ -3,15 +3,38 @@ int n; int k; int A[100000]; +int max = 1; +int p(int m){ + int i,a = 0; + for(i = 0; i < n; i++){ + a = a + (A[i] + m - 1) / m ; + } + return a <= k; + } int main(){ int i, lb, ub; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); + if(A[i] > max){ + max = A[i]; + } } - - - return 0; + lb = 0; + ub = max; + + + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(p(mid)){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n",ub); + return 0; } diff --git a/src/array.c b/src/array.c index 13ed925..d54e505 100644 --- a/src/array.c +++ b/src/array.c @@ -5,14 +5,25 @@ int k; int A[100000]; + + int main(){ int i, lb, ub; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - - + ub = n; + lb = -1; + while(ub - lb > 1){ + int mid = (lb + ub) / 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..0775c85 100644 --- a/src/spear.c +++ b/src/spear.c @@ -3,14 +3,38 @@ int n; int k; int A[100000]; +int max = 1000000001; - +int p(int m){ + int i,a = 0; + for(i = 0; i < n; i++){ + a = A[i] / m + a; + } + return a < k; + } int main(){ int i, lb, ub; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); + } } + lb = 0; + ub = max; + + + + + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(p(mid)){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n",lb); return 0; diff --git a/src/works.c b/src/works.c index 766d543..3ba0dc4 100644 --- a/src/works.c +++ b/src/works.c @@ -4,6 +4,31 @@ int n; int k; int A[100000]; +int p(int m){ + int i = 0; + int a = 0; + int sum = 0; + for (i = 0; i < n; i++){ + if(A[i] > m){ + return 0; + } + else{ + sum = A[i] + sum; + if(sum > m){ + a++; + sum = A[i]; + } + else if(sum == m){ + a++; + sum = 0; + } + } + } + if(sum != 0){ + a++; + } + return a <= k; + } int main(){ int i, lb, ub; @@ -11,7 +36,20 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - - return 0; + 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; }