From 2c59692d06a4d22c83bce4655a25ca4dbfaf8a65 Mon Sep 17 00:00:00 2001 From: igari syu Date: Tue, 28 Jun 2022 06:33:46 +0900 Subject: [PATCH 1/4] revised --- src/apple.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/src/apple.c b/src/apple.c index 766d543..c541206 100644 --- a/src/apple.c +++ b/src/apple.c @@ -4,14 +4,57 @@ int n; int k; int A[100000]; +int arrayMax(int a[], int n){ + int max = 0; + for(int i = 0; i < n; i++){ + if(max < a[i]){ + max = a[i]; + } + } + return max; +} -int main(){ - int i, lb, ub; - scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ - scanf("%d", &A[i]); - } +unsigned int binary_search(int A[], int k, int n){ + int lb = 1; + int ub = arrayMax(A, n); + int sum = 0; + while(ub -lb > 1){ + sum = 0; + int mid = (lb + ub) / 2; + for(int i = 0; i < n; i++){ + sum = sum + (A[i] + mid - 1) / mid; + } + if(sum > k){ + lb = mid; + } + else if(sum <= k){ + ub = mid; + } + } + sum = 0; + for(int i = 0; i < n; i++){ + sum = sum + (A[i] + lb - 1) / lb; + } + if(sum > k){ + return ub; + } + else { + return lb; + } + return 0; +} +int main(){ + int i; + scanf("%d%d", &n, &k); + for(i = 0; i < n; i++){ + scanf("%d", &A[i]); + } + int result = binary_search(A, k, n); + printf("結果=%d\n", result); - return 0; + return 0; } + + + From a87d8b12fec41792694d602f56d9f028509a4ab8 Mon Sep 17 00:00:00 2001 From: igari syu Date: Tue, 28 Jun 2022 06:36:00 +0900 Subject: [PATCH 2/4] revised --- src/array.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/array.c b/src/array.c index 13ed925..893a3c0 100644 --- a/src/array.c +++ b/src/array.c @@ -4,15 +4,28 @@ int n; int k; int A[100000]; +unsigned int binary_search(int A[], int x, int n){ + int lb = -1; + int ub = n; + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(A[mid] >= x) ub = mid; + else lb = mid; + } + return ub; +} int main(){ - int i, lb, ub; - scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ - scanf("%d", &A[i]); - } + int i, ub; + scanf("%d%d", &n, &k); + for(i = 0; i < n; i++){ + scanf("%d", &A[i]); + } + ub = binary_search(A, k, n); + + printf("%d\n", ub); + return 0; +} - return 0; -} From 6812cda0eb8e8fdb771679e4f453bc3139aa84af Mon Sep 17 00:00:00 2001 From: igari syu Date: Tue, 28 Jun 2022 06:37:08 +0900 Subject: [PATCH 3/4] revised --- src/spear.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/src/spear.c b/src/spear.c index 766d543..583a3af 100644 --- a/src/spear.c +++ b/src/spear.c @@ -4,14 +4,54 @@ int n; int k; int A[100000]; +int arrayMax(int a[], int n){ + int max = 0; + for(int i = 0; i < n; i++){ + if(max < a[i]){ + max = a[i]; + } + } + return max; +} +unsigned int binary_search(int A[], int k, int n){ + int sma = 0; + int big = arrayMax(A, n); + int sum = 0; + while(big - sma > 1){ + sum = 0; + int mid = (big + sma) / 2; + for(int i = 0; i < n; i++){ + sum = sum + A[i] / mid; + } + if(sum >= k){ + sma = mid; + } + else if(sum < k){ + big = mid; + } + } + sum = 0; + for(int i = 0; i < n; i++){ + sum = sum + A[i] / big; + } + if(sum == k){ + return big; + } + else { + return sma; + } + return 0; +} int main(){ - int i, lb, ub; - scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ - scanf("%d", &A[i]); - } + int i; + scanf("%d%d", &n, &k); + for(i = 0; i < n; i++){ + scanf("%d", &A[i]); + } + int result = binary_search(A, k, n); + printf("結果=%d\n", result); + return 0; - return 0; } From 95b999efdb23085bf4154722649b5f2cf779d99f Mon Sep 17 00:00:00 2001 From: igari syu Date: Tue, 28 Jun 2022 06:37:36 +0900 Subject: [PATCH 4/4] revised --- src/works.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/src/works.c b/src/works.c index 766d543..4de7bc8 100644 --- a/src/works.c +++ b/src/works.c @@ -4,14 +4,74 @@ int n; int k; int A[100000]; +int sumarray(int a[], int n){ + int sum = 0; + for(int i = 0; i < n; i++){ + sum = sum + a[i]; + } + return sum; +} + + +unsigned int binary_search(int A[], int k, int n){ + int sma = 1; + int big = sumarray(A, n); + int mid = 0; + int nin; + int chk; + int midmid=0; + int max; + + while(big - sma > 1){ + mid = (big + sma) / 2; + nin = 1; + chk = 0; + max = 0; + for(int i = 0; i < n; i++){ + if(A[i]>mid){ + nin=0; + break; + } + if(max mid){ + nin++; + chk = A[i]; + if(i==(n-1) && max