[CQOI2010]扑克牌

[CQOI2010]扑克牌

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

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

题意:
给n种牌,每种牌有a[i]张,m张万能牌,问能组成多少套牌。(每套牌只能使用一次万能牌)

分析:
可以考虑二分答案,贪心进行判断。
二分思路:假设答案为x,即最多能够构成x套牌,那么每种牌至少x张,所以但c[i]<x时要用万能牌进行补充,如果c[i]<x,统计万能牌使用数量,即sum+=(x-c[i])。最后判断一下万能牌使用数量是否小于m且每套牌是否只用一次万能牌,即sum<=min(m,x)。
记得开longlong!

代码:

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<vector>
using namespace std;
typedef long long ll;
ll i,j,n,k,m,t,s,y;
ll ans;
ll a[55],f[55];
bool check(ll x){
    ll sum=0;
    for(int i=0;i<n;i++){
        if(a[i]<x){
            sum+=(x-a[i]);
        }else{
            break;
        }
    }
    return sum<=min(m,x);
}
int main()
{
    scanf("%lld%lld",&n,&m);
    for(i=0;i<n;i++){
        scanf("%lld",&a[i]);
    }
    sort(a,a+n);
    ll l=0,r=1e9;
    while(r>=l){
        ll mid=(l+r)>>1;
        if(check(mid)){//mid满足
            l=mid+1;
            ans=mid;
        }else{
            r=mid-1;
        }
    }
    printf("%lld",ans);
}
全部评论

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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