[每日一题] [NC19916] 扑克牌

题目大意:有n种扑克牌,每种有ci个。还有m张百搭牌。一个套牌是1,2,...,n或者用百搭牌代替其中任一张。最多可以造出几个套牌。

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

也许有纯数学的做法,但是能造出k个套牌显然也能造出k-1个套牌,所以feasibility符合单调性。可以使用binary search寻找最大的k,使得可以造出k个套牌。

对于k个套牌,第i中套牌必须使用max(0, k-ci)个百搭牌,而且每个百搭牌只能在一套里出现,所以总和不超过min(m, k)。

bool feas(ll cnt, VL& c, ll m) {
  // Checks if it's possible to get cnt decks.
  VL each;
  FORE(x, c) {
    each.PB(max(0LL, cnt - x));
  }
  ll sm = SUM(each);
  return sm <= m && sm <= cnt;
}

int main(int argc, char* argv[]) {
  /* Do not use for codejam. */
  /* ios_base::sync_with_stdio(false); cin.tie(NULL); */
  readint(n);readlong(m);
  readvl(c, n);
  ll lo = 0, hi = 20000000000LL;
  while (lo < hi) {
    ll mi = RMID(lo, hi);
    if (feas(mi, c, m)) {
      lo = mi;
    } else {
      hi = mi - 1;
    }
  }
  printlong(lo);
  return 0;
}
全部评论

相关推荐

暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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