HDU 4190 二分答案

    科技2024-11-22  23

    把B个投票箱分配到n个城市,每个城市至少一个投票箱,投票箱的容量最小是多少? 求二分区间中满足条件的最小值。

    #include <cstdio> #include <cmath> #include <algorithm> using namespace std; const int MAXN = 2e6 + 10; int a[MAXN]; int n, b; bool check(int mid) { int num = 0; for (int i = 0; i < n; ++i) { num += ceil(a[i]*1.0/mid); // 计算一座城市需要多少个箱子 } if (num <= b) { // 箱子数比给的少满足条件 return true; } else { return false; } } int main() { while (~scanf("%d%d", &n, &b)) { if (n == -1 && b == -1) { break; } int maxNum = 0; for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); maxNum = max(maxNum, a[i]); } int l = 0; int r = maxNum; int ans = 0; while (l <= r) { int mid = (l + r) >> 1; if (check(mid)) { ans = mid; r = mid - 1; } else { l = mid + 1; } } printf("%d\n", ans); } return 0; }
    Processed: 0.010, SQL: 8