bzoj1816: [Cqoi2010]扑克牌

Posted sssy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1816: [Cqoi2010]扑克牌相关的知识,希望对你有一定的参考价值。

题目链接

bzoj1816: [Cqoi2010]扑克牌

题解

还是挺妙的
一套牌只能用一张Joker,那么贪心是不对的
若能够组成k套牌,那么joker一定有种方法在k套牌中出现<=1次
那么,二分套数,检验joker够不够用

代码

/*
还是挺妙的
若能够组成k套牌,那么joker一定有种方法在k套牌中出现<=1次 
那么 
二分套数,检验joker够不够用
*/
#include<cstdio> 
#include<cstring> 
#include<algorithm> 
inline int read() {
     int x = 0,f = 1;
     char c = getchar(); 
     while ( c < '0' || c > '9')c = getchar(); 
     while(c <= '9' &&c >= '0')x = x*10 + c- '0',c = getchar() ; 
     return x ; 
} 
int n,m;  
int c[79]; 
bool check(int x) { 
    int ned = std::min(x,m); 
    int mx = 0,cmx= 0 ; 
    for(int i = 1;i <= n;++ i) {
        if(c[i] < x) ned -= x - c[i]; 
        if(ned < 0) return false; 
    } 
    return true; 
} 
int main() {  
    n = read(),m = read(); 
    for(int i = 1;i <= n;++ i) c[i] = read(); 
    int l = 0,r = 1000000007; 
    int ans = 0;
    while(l <= r) {
        int mid = l + r >> 1; 
        if(check(mid)){ ans = mid;l = mid + 1; } 
        else r = mid-  1; 
    } 
    printf("%d
",ans); 
    return 0; 
} 

以上是关于bzoj1816: [Cqoi2010]扑克牌的主要内容,如果未能解决你的问题,请参考以下文章

bzoj 1816: [Cqoi2010]扑克牌

BZOJ1816[Cqoi2010]扑克牌 二分

bzoj1816: [Cqoi2010]扑克牌

bzoj1816[Cqoi2010]扑克牌 二分

[CQOI 2010]扑克牌

BZOJ 1816 扑克牌