From e38c3b9720feac9087099ca52bf15199f5f6e806 Mon Sep 17 00:00:00 2001 From: Toyama Keito Date: Mon, 27 Jun 2022 16:41:13 +0900 Subject: [PATCH 1/3] revised --- src/apple.c | 19 ++++++++++++++----- src/array.c | 18 ++++++++++++++++-- src/spear.c | 16 +++++++++++++++- src/works.c | 32 ++++++++++++++++++++++++++++++-- 4 files changed, 75 insertions(+), 10 deletions(-) diff --git a/src/apple.c b/src/apple.c index 766d543..95dec9a 100644 --- a/src/apple.c +++ b/src/apple.c @@ -1,17 +1,26 @@ #include -int n; -int k; +int n = 0; +int k = 0; int A[100000]; +int p(int i1,int i2,int X[]){ + return X[i2] > i1; +} int main(){ - int i, lb, ub; + int i, lb, ub = 0; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - + lb = -1; + ub = n; + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(p(k,mid,A)) ub = mid; + else lb = mid; + } + printf("%d\n", ub); return 0; } diff --git a/src/array.c b/src/array.c index 13ed925..7bb9ddf 100644 --- a/src/array.c +++ b/src/array.c @@ -4,6 +4,13 @@ int n; int k; int A[100000]; +int p(int i1, int i2, int i3,int X[]){ + int sum = i1; + for(int m = 0; m < i1; m++){ + sum += (A[m] - 1) / i3; + } + return sum > i2; +} int main(){ int i, lb, ub; @@ -11,8 +18,15 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - + lb = 0; + ub = 10000; + while(ub - lb >1){ + int mid = (lb + ub ) / 2; + + if(p(n,k,mid,A) ) lb = mid; + else ub = mid; + } + printf("%d\n", ub); return 0; } diff --git a/src/spear.c b/src/spear.c index 766d543..dbf0794 100644 --- a/src/spear.c +++ b/src/spear.c @@ -4,6 +4,13 @@ int n; int k; int A[100000]; +int p(int i1,int i2, int i3, int X[]){ + int sum = 0; + for(int m = 0;m < i1; m++){ + sum += X[m] / i3; + } + return sum < i2; +} int main(){ int i, lb, ub; @@ -11,7 +18,14 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - + lb = 0; + ub = 1000000000; + while(ub - lb >1){ + int mid = (lb + ub ) / 2; + if(p(n,k,mid,A)) ub = mid; + else lb = mid; + } + printf("%d\n", lb); return 0; } diff --git a/src/works.c b/src/works.c index 766d543..6c8a621 100644 --- a/src/works.c +++ b/src/works.c @@ -4,6 +4,24 @@ int n; int k; int A[100000]; +int p(int l1,int l2,int l3, int X[]){ + int i1 = 0; + int i2 = 0; + int sum = 0; + while(i2 l3){ + sum = 0; + i1++; + i2++; + } + else return 0; + } + return i1 <= l2; +} int main(){ int i, lb, ub; @@ -11,7 +29,17 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - + int u = 0; + for(int i = 0;i1){ + int mid = ( lb + ub ) / 2; + if(p(n,k,mid,A)) ub = mid; + else lb = mid; + } + printf("%d\n", lb); return 0; } From b5a807a1d108423827a53ca1826e059083e75964 Mon Sep 17 00:00:00 2001 From: Toyama Keito Date: Tue, 5 Jul 2022 10:48:46 +0900 Subject: [PATCH 2/3] revised --- src/apple.c | 30 +++++++++++++++++++----------- src/array.c | 30 +++++++++++++----------------- src/spear.c | 5 ++++- src/works.c | 21 +++++++++++++-------- 4 files changed, 49 insertions(+), 37 deletions(-) diff --git a/src/apple.c b/src/apple.c index 95dec9a..475fb0f 100644 --- a/src/apple.c +++ b/src/apple.c @@ -1,26 +1,34 @@ #include -int n = 0; -int k = 0; + +//更新:ファイルの入れ替えをしました +int n; +int k; int A[100000]; -int p(int i1,int i2,int X[]){ - return X[i2] > i1; +int p(int i1, int i2, int i3,int X[]){ + int sum = i1; + for(int m = 0; m < i1; m++){ + sum += (A[m] - 1) / i3; + } + return sum > i2; } int main(){ - int i, lb, ub = 0; + int i, lb, ub; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - lb = -1; - ub = n; - while(ub - lb > 1){ - int mid = (lb + ub) / 2; - if(p(k,mid,A)) ub = mid; - else lb = mid; + lb = 0; + ub = 1000000001; + while(ub - lb >1){ + int mid = (lb + ub ) / 2; + + if(p(n,k,mid,A) ) lb = mid; + else ub = mid; } printf("%d\n", ub); + return 0; } diff --git a/src/array.c b/src/array.c index 7bb9ddf..2fb9b57 100644 --- a/src/array.c +++ b/src/array.c @@ -1,32 +1,28 @@ #include -int n; -int k; +//更新:ファイルを入れ替えました。 + +int n = 0; +int k = 0; int A[100000]; -int p(int i1, int i2, int i3,int X[]){ - int sum = i1; - for(int m = 0; m < i1; m++){ - sum += (A[m] - 1) / i3; - } - return sum > i2; +int p(int i1,int i2,int X[]){ + return X[i2] > i1; } int main(){ - int i, lb, ub; + int i, lb, ub = 0; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - lb = 0; - ub = 10000; - while(ub - lb >1){ - int mid = (lb + ub ) / 2; - - if(p(n,k,mid,A) ) lb = mid; - else ub = mid; + lb = -1; + ub = n; + while(ub - lb > 1){ + int mid = (lb + ub) / 2; + if(p(k,mid,A)) ub = mid; + else lb = mid; } printf("%d\n", ub); - return 0; } diff --git a/src/spear.c b/src/spear.c index dbf0794..6221b8d 100644 --- a/src/spear.c +++ b/src/spear.c @@ -1,5 +1,8 @@ #include + +//更新:初期値を変更しました。 + int n; int k; int A[100000]; @@ -19,7 +22,7 @@ int main(){ scanf("%d", &A[i]); } lb = 0; - ub = 1000000000; + ub = 1000000001; while(ub - lb >1){ int mid = (lb + ub ) / 2; if(p(n,k,mid,A)) ub = mid; diff --git a/src/works.c b/src/works.c index 6c8a621..b3e6636 100644 --- a/src/works.c +++ b/src/works.c @@ -1,26 +1,31 @@ #include +//更新:初期値を変更、p関数の不等号を調節しました。 + int n; int k; int A[100000]; -int p(int l1,int l2,int l3, int X[]){ +int p(int k1,int k2,int k3, int X[]){ int i1 = 0; int i2 = 0; int sum = 0; - while(i2 l3){ + else if(sum <= k3 && i2 < k1-1 ){ sum = 0; i1++; i2++; } - else return 0; + else if(sum <= k3 && i2 == k1-1) i1++; + else if(sum > k3) return 0; + } - return i1 <= l2; + if(i1 < k2 ) return 1; + else return 0; } int main(){ @@ -34,12 +39,12 @@ int main(){ u += A[i]; } lb = 1; - ub = 1000000000; + ub = 10000; while(ub - lb >1){ int mid = ( lb + ub ) / 2; if(p(n,k,mid,A)) ub = mid; else lb = mid; } - printf("%d\n", lb); + printf("%d\n", ub); return 0; } From 6945dc272d880ddd9817bb56653df190b52a705c Mon Sep 17 00:00:00 2001 From: Toyama Keito Date: Tue, 9 Aug 2022 11:40:52 +0900 Subject: [PATCH 3/3] revised --- src/apple.c | 2 +- src/array.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apple.c b/src/apple.c index 475fb0f..88891b6 100644 --- a/src/apple.c +++ b/src/apple.c @@ -21,7 +21,7 @@ int main(){ scanf("%d", &A[i]); } lb = 0; - ub = 1000000001; + ub = 1000000000; while(ub - lb >1){ int mid = (lb + ub ) / 2; diff --git a/src/array.c b/src/array.c index 2fb9b57..2eb2497 100644 --- a/src/array.c +++ b/src/array.c @@ -7,7 +7,7 @@ int k = 0; int A[100000]; int p(int i1,int i2,int X[]){ - return X[i2] > i1; + return X[i2] >= i1; } int main(){