diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ + diff --git a/src/apple.c b/src/apple.c index 766d543..fa3fd56 100644 --- a/src/apple.c +++ b/src/apple.c @@ -4,14 +4,41 @@ int n; int k; int A[100000]; +unsigned int p(int x) +{ + int sum = 0; + for (int i = 0; i < n; i++) + { + sum += (A[i] + x - 1) / x; + } + + return sum <= k; +} -int main(){ - int i, lb, ub; +int main() +{ + int i; scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ + 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 (p(mid)) + ub = mid; + + else + lb = mid; + } + + printf("%d", ub); return 0; } diff --git a/src/array.c b/src/array.c index 13ed925..ae37751 100644 --- a/src/array.c +++ b/src/array.c @@ -4,15 +4,30 @@ int n; int k; int A[100000]; - -int main(){ - int i, lb, ub; +int main() +{ + int i; scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ + 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..ae166b4 100644 --- a/src/spear.c +++ b/src/spear.c @@ -4,14 +4,40 @@ int n; int k; int A[100000]; +unsigned int p(int x) +{ + int sum = 0; + for (int i = 0; i < n; i++) + { + sum += A[i] / x; + } + + return sum < k; +} -int main(){ - int i, lb, ub; +int main() +{ + int i; scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ + 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 (p(mid)) + ub = mid; + else + lb = mid; + } + + printf("%d", lb); return 0; } diff --git a/src/works.c b/src/works.c index 766d543..b6a25fc 100644 --- a/src/works.c +++ b/src/works.c @@ -4,14 +4,50 @@ int n; int k; int A[100000]; +unsigned int p(int x) +{ + int sum = 0; + int w = 1; + for (int i = 0; i < n; i++) + { + if (A[i] > x) + return 0; + if (sum + A[i] > x) + { + sum = A[i]; + w++; + } + else + { + sum += A[i]; + } + } + return w <= k; +} -int main(){ - int i, lb, ub; +int main() +{ + int i; scanf("%d%d", &n, &k); - for(i = 0; i < n; i++){ + 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 (p(mid)) + ub = mid; + else + lb = mid; + } + + printf("%d", ub); return 0; }