diff --git a/src/apple.c b/src/apple.c index 766d543..4286cf5 100644 --- a/src/apple.c +++ b/src/apple.c @@ -6,12 +6,34 @@ int A[100000]; int main(){ - int i, lb, ub; + int i, max; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); + } + for(i = 0; i < n; i++){ + if(A[i] > max) max = A[i]; + } + + int lb = 0; + int ub = max; + while (ub - lb > 1){ + int mid = (lb + ub ) / 2; + int bag=0; + for(i = 0;i < n; i++){ + int j = 1; + while(j*mid < A[i]){ + j++; + } + bag += j; + } + + if (k >= bag) ub = mid ; + else lb = mid ; +} +printf("%d", ub); return 0; } diff --git a/src/array.c b/src/array.c index 13ed925..36d0104 100644 --- a/src/array.c +++ b/src/array.c @@ -6,12 +6,19 @@ int A[100000]; int main(){ - int i, lb, ub; + int i; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - + int lb = -1; + int ub = n; + while (ub - lb > 1){ + int mid = (lb + ub ) / 2; + if (A[ mid ] >= k) ub = mid ; + else lb = mid ; +} +printf("%d",ub); return 0; diff --git a/src/spear.c b/src/spear.c index 766d543..386425e 100644 --- a/src/spear.c +++ b/src/spear.c @@ -6,12 +6,25 @@ int A[100000]; int main(){ - int i, lb, ub; + int i,max=0; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - + for(i = 0; i < n; i++){ + if(A[i] > max) max = A[i]; + } + int lb = 0; + int ub = max; + while (ub - lb > 1){ + int mid = (lb + ub ) / 2; + int s = 0; + for(i = 0; i < n; i++){ + s += A[i] / mid; + } + if (s < k) ub = mid ; + else lb = mid ; +} + printf("%d", lb); return 0; } diff --git a/src/works.c b/src/works.c index 766d543..63bca92 100644 --- a/src/works.c +++ b/src/works.c @@ -4,14 +4,38 @@ int n; int k; int A[100000]; +int work(int timelimits, int people){ + int workingtime = 0; + int humans = 1; + for(int i = 0; i < n; i++){ + if(A[i] > timelimits)return 0; + + + workingtime += A[i]; + + if(workingtime > timelimits){ + humans += 1; + workingtime = A[i]; + } + } + if(people >= humans) return 1; + else return 0; +} int main(){ - int i, lb, ub; + int i; scanf("%d%d", &n, &k); for(i = 0; i < n; i++){ scanf("%d", &A[i]); } + int lb = 0; + int ub = 1000000000; + while (ub - lb > 1){ + int mid = (lb + ub ) / 2; - + if (work(mid,k)) ub = mid ; + else lb = mid ; +} + printf("%d", ub); return 0; }