扑克牌 BZOJ

来源:互联网 发布:如何优化淘宝排名 编辑:程序博客网 时间:2024/05/19 00:42

题目传送门

思路:我们可以通过二分可以组成的方案数,然后判断函数可以通过构造搞出来。

#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <stack>#include <string>#include <vector>#define MAXN 10100#define MAXE 5#define INF 1e9#define MOD 100003#define LL long long#define ULL unsigned long long#define pi 3.14159using namespace std;LL n, m;LL arr[MAXN];bool check(LL mid) {    LL temp = min(m, mid);    for (int i = 1; i <= n; ++i) {        if (mid > arr[i]) {            temp -= (mid - arr[i]);        }        if (temp < 0) {            return false;        }    }    return true;}int main() {    std::ios::sync_with_stdio(false);    cin >> n >> m;    for (int i = 1; i <= n; ++i) {        cin >> arr[i];    }    LL left = 0, right = 1e9;    LL mid = (left + right) / 2;    for (int i = 0; i < 100; ++i) {        if (check(mid)) {            left = mid;        } else {            right = mid;        }        mid = (left + right) / 2;    }    cout << mid << endl;    return 0;}