From b8ffcd13a3252eb27a8018f3c5b1ae6a0c9d3eeb Mon Sep 17 00:00:00 2001 From: chen long Date: Tue, 28 Jun 2022 01:21:55 +0800 Subject: [PATCH 1/5] revised --- src/array.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/array.c b/src/array.c index 13ed925..9e22bbf 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 = 0; + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(A[mid] >= k){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n",ub); return 0; } From 9b6fda85d03bc395b14b04f242832b9ff68630a7 Mon Sep 17 00:00:00 2001 From: chen long Date: Tue, 28 Jun 2022 01:22:13 +0800 Subject: [PATCH 2/5] revised --- src/apple.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) 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; } From 1743c1bcae0f1f7feadc128865c537601d59cd13 Mon Sep 17 00:00:00 2001 From: chen long Date: Tue, 28 Jun 2022 01:22:31 +0800 Subject: [PATCH 3/5] revised --- src/spear.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/spear.c b/src/spear.c index 766d543..d0faa7d 100644 --- a/src/spear.c +++ b/src/spear.c @@ -3,14 +3,40 @@ 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[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]); + if(A[i] > max){ + max = 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; From 42ea9e6a78abeaa200801a5c47ebc182ca0a4def Mon Sep 17 00:00:00 2001 From: chen long Date: Tue, 28 Jun 2022 01:22:45 +0800 Subject: [PATCH 4/5] revised --- src/works.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/works.c b/src/works.c index 766d543..bb3c1ad 100644 --- a/src/works.c +++ b/src/works.c @@ -3,15 +3,43 @@ int n; int k; int A[100000]; +int max = 1; +int p(int m){ + int i,a = 0; + for (i = 0; i < n; i++){ + m = m - A[i]; + if(m <= 0){ + a = a + 1; + } + } + 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]; + } } - + lb = max; + ub = n * max; + + + + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(p(mid)){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n",lb); return 0; } From 626e71c59bb8c699ae6152b7ea7457e53b7f2efb Mon Sep 17 00:00:00 2001 From: chenlong Date: Mon, 8 Aug 2022 23:41:26 +0800 Subject: [PATCH 5/5] revised --- src/array.c | 2 +- src/spear.c | 4 +--- src/works.c | 40 +++++++++++++++++++++++++--------------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/array.c b/src/array.c index 9e22bbf..d54e505 100644 --- a/src/array.c +++ b/src/array.c @@ -14,7 +14,7 @@ int main(){ scanf("%d", &A[i]); } ub = n; - lb = 0; + lb = -1; while(ub - lb > 1){ int mid = (lb + ub) / 2; if(A[mid] >= k){ diff --git a/src/spear.c b/src/spear.c index d0faa7d..0775c85 100644 --- a/src/spear.c +++ b/src/spear.c @@ -3,7 +3,7 @@ int n; int k; int A[100000]; -int max = 1; +int max = 1000000001; int p(int m){ int i,a = 0; @@ -17,8 +17,6 @@ int main(){ scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); - if(A[i] > max){ - max = A[i]; } } lb = 0; diff --git a/src/works.c b/src/works.c index bb3c1ad..3ba0dc4 100644 --- a/src/works.c +++ b/src/works.c @@ -3,17 +3,31 @@ int n; int k; int A[100000]; -int max = 1; int p(int m){ - int i,a = 0; + int i = 0; + int a = 0; + int sum = 0; for (i = 0; i < n; i++){ - m = m - A[i]; - if(m <= 0){ - a = a + 1; + if(A[i] > m){ + return 0; } - } - return a < k; + 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(){ @@ -21,12 +35,9 @@ int main(){ scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); - if(A[i] > max){ - max = A[i]; - } } - lb = max; - ub = n * max; + lb = 0; + ub = 1000000000; @@ -39,7 +50,6 @@ int main(){ lb = mid; } } - printf("%d\n",lb); - - return 0; + printf("%d\n",ub); + return 0; }