diff --git a/src/apple.c b/src/apple.c index 766d543..88891b6 100644 --- a/src/apple.c +++ b/src/apple.c @@ -1,9 +1,18 @@ #include + +//更新:ファイルの入れ替えをしました 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,7 +20,15 @@ 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) ) lb = mid; + else ub = mid; + } + printf("%d\n", ub); return 0; } diff --git a/src/array.c b/src/array.c index 13ed925..2eb2497 100644 --- a/src/array.c +++ b/src/array.c @@ -1,18 +1,28 @@ #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/spear.c b/src/spear.c index 766d543..6221b8d 100644 --- a/src/spear.c +++ b/src/spear.c @@ -1,9 +1,19 @@ #include + +//更新:初期値を変更しました。 + 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 +21,14 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - + lb = 0; + ub = 1000000001; + 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..b3e6636 100644 --- a/src/works.c +++ b/src/works.c @@ -1,9 +1,32 @@ #include +//更新:初期値を変更、p関数の不等号を調節しました。 + int n; int k; int A[100000]; +int p(int k1,int k2,int k3, int X[]){ + int i1 = 0; + int i2 = 0; + int sum = 0; + while(i2 k3) return 0; + + } + if(i1 < k2 ) return 1; + else return 0; +} int main(){ int i, lb, ub; @@ -11,7 +34,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", ub); return 0; }