【每日一题】扑克牌

[CQOI2010]扑克牌

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

题意

有n种扑克牌,每种有ci个。还有m张王牌。可以代替其中任一张。最多可以造出几个套牌(每副牌只能用一次)。

solution

典型的二分答案,每副牌只能使用一次,所以限制使用的王牌数为 ,每种牌不够 张需要王牌补,计算使用的王牌数为图片说明判断是否满足条件即可。

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m, a[105];

bool check(ll x) {
  ll cnt = min(m, x);
  for (ll i = 1; i <= n; i++) cnt -= max(x - a[i], 0LL);
  return cnt >= 0;
}

int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> a[i];
  ll l = 0, r = 1e9, mid;
  while (l + 1 < r) {
    mid = l + r >> 1;
    if (check(mid))
      l = mid;
    else
      r = mid;
  }
  cout << l << '\n';
  return 0;
}
全部评论

相关推荐

头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务