NC 19916 [CQOI2010] 二分

    技术2022-07-12  91

    题意

    传送门 NC 19916 [CQOI2010]扑克牌

    题解

    直接求牌组数不容易求,考虑二分检验答案。若某类牌的数量小于牌组数,则余下的位置用 J o k e Joke Joke 补上;若处理完每一类牌,所需的 J o k e Joke Joke 数量小于 m m m 且小于牌组数(保证每一组至多一张 J o k e Joke Joke),则有可行方案。

    #include <bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define maxn 55 int n, m, c[maxn]; bool judge(int x) { int s = 0; for (int i = 0; i < n; i++) { if (c[i] >= x) continue; s += x - c[i]; if (s > x || s > m) return 0; } return 1; } int main() { scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) scanf("%d", c + i); int lb = 0, ub = inf; while (ub - lb > 1) { int mid = (lb + ub) >> 1; if (judge(mid)) lb = mid; else ub = mid; } printf("%d\n", lb); return 0; }
    Processed: 0.011, SQL: 9