bzoj1816: [Cqoi2010]撲克牌
阿新 • • 發佈:2018-07-07
inline getchar 撲克牌 題目 std for class ring print
題目鏈接
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\n",ans); return 0; }
bzoj1816: [Cqoi2010]撲克牌