题解 | #[CQOI2010]扑克牌#

[CQOI2010]扑克牌

https://ac.nowcoder.com/acm/problem/19916

模板题

二分答案+检验

选择Cimax+mmax作为右界,即1e9

代码如下:

#include <bits/stdc++.h>
using namespace std;

#define ll long long
int n,m;
int c[55];
bool juage(int x){
    ll sum = 0;
    for(int i = 1;i <= n;i++)
        if(c[i] < x) sum += (x - c[i]);
    return (sum <= m && sum <= x);
}

int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    int l = 1,r = 1e9,temp = 0;
    cin>>n>>m;
    for(int i = 1;i <= n;i++){
        cin>>c[i];
        temp = max(temp,c[i]);    //维护序列中的最大值
    }
    //边界处理
    if(!temp){
        if(!m) cout<<0;
        else cout<<m;
        return 0;
    }
    
    //二分答案+检验
    while(l <= r){
        int mid = l + (r - l)/2;
        if(juage(mid)) l = mid + 1;
            else r = mid - 1;
    }
    cout<<l - 1;
    return 0;
}
全部评论

相关推荐

09-30 15:27
已编辑
成都工业学院 企业文化
Morpheus_:候选人:还需要测验武力值?
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务