Description

你有n种牌,第i种牌的数目为ci。另外有一种特殊的牌:joker,它的数目是m。你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套牌。比如,当n=3时,一共有4种合法的套牌:{1,2,3}, {J,2,3}, {1,J,3}, {1,2,J}。 给出n, m和ci,你的任务是组成尽量多的套牌。每张牌最多只能用在一副套牌里(可以有牌不使用)。

Input

第一行包含两个整数n, m,即牌的种数和joker的个数。第二行包含n个整数ci,即每种牌的张数。

Output

输出仅一个整数,即最多组成的套牌数目。

Sample Input

3 4
1 2 3

Sample Output

3

样例解释
输入数据表明:一共有1个1,2个2,3个3,4个joker。最多可以组成三副套牌:{1,J,3}, {J,2,3}, {J,2,3},joker还剩一个,其余牌全部用完。

数据范围
50%的数据满足:2 < = n < = 5, 0 < = m < = 10^ 6, 0< = ci < = 200
100%的数据满足:2 < = n < = 50, 0 < = m, ci < = 500,000,000。

Solution

通过观察题目,我们可以发现一些性质:

  • 每套牌至少有除 joker 之外的至少 \(n-1\)种牌。
  • 如果有\(m\)套牌,那么每种牌至少需要\(m\)张,否则需要 Joker 去补齐。
  • Joker 至多只能补齐 \(Max(m,num_{joker})\)张牌。

通过以上条件即可判定一个数目\(m\)是否可行。
然后我们对于\(m\)二分即可。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=100008;
long long n,a[maxn],m,ans,xx=0;
bool jud(long long x)
{long long tt=min(m,x);for(int i=1;i<=n;i++){tt-=max(x-a[i],xx);if(tt<0)return 0;}return 1;
}int main()
{//freopen("p.in","r",stdin);//freopen("p.out","w",stdout); cin>>n>>m;for(int i=1;i<=n;i++)scanf("%lld",&a[i]);long long l=1,r=100000000000000;while(l<=r){long long mid=(l+r)/2;if(jud(mid)){ans=mid,l=mid+1;}else r=mid-1;}   cout<<ans<<endl;
}

转载于:https://www.cnblogs.com/Kv-Stalin/p/9323838.html

[CQOI2010] 扑克牌 (二分答案,巧解)相关推荐

  1. BUPT计导第三次机考12.8数组+二分答案详解

    坐标:BUPT:OJ:Excited OJ %%%AK大佬,感觉这次AK的人均OI选手-- 还是刷题不够Orzzzz A.阿尔法乘积 注意题目要求:非零的数相乘 注意数据范围:应为long long而 ...

  2. 二分查找 二分答案 万字详解,超多例题,带你学透二分。

    很多人对二分感到很苦恼,很困惑,可能是因为二分的边界很难掌握,也许是判断条件难写- 然而,很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你学透二分!!! 二分可以简单分为二分查找与二分答案. 可能 ...

  3. 【基础算法】二分法(二分答案,二分查找),三分法,Dinkelbach算法,算法详解+例题剖析

    目录 一 . 二分法 二分搜索得要求: 二分查找步骤: 二分答案: 玄学的二分(二分答案) 二 . 三分法 例题 三.01分数规划问题相关算法与题目讲解(二分法与Dinkelbach算法) 一 . 二 ...

  4. [USACO]地震 (二分答案+最优比率生成树详解)

    题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...

  5. [BZOJ4556][TJOI2016HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)

    4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1360  Solved: 545 ...

  6. 牛客网暑期ACM多校训练营(第五场)A-gap (二分答案)

    题目描述 给定n 门课以及它们的学分和绩点,定义总绩点是所有课的加权平均数,给定一个数k, 你可以删除最多k 门课,求你的总绩点最大能到多少 1 <=n <=10^5 解题思路 考虑分数规 ...

  7. 紫书 例题8-10 UVa 714 (二分答案)

    这道题让最大值最小, 显然是二分答案 当题目求的是最大值最小, 最小值最大, 这个时候就要想到二分答案 为什么可以二分答案呢, 因为这个时候解是单调性的, 如果简单粗暴一点 就全部枚举一遍, 验证答案 ...

  8. 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路

    在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量有一天他醒来后发现自己居然到了联盟的主城暴风城在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目背景 [题目描述:] 在艾泽拉斯 ...

  9. matlab中函数或变量无法识别怎么办_用MATLAB巧解微分方程实例分析

    点"考研竞赛数学"↑可每天"涨姿势"哦! MATLAB巧解微分方程实例分析 王少华 西安电子科技大学 微分方程求解难, 字母一堆看着烦. 写错数字一时爽, 一直 ...

  10. 二分答案——数列分段 Section II(洛谷 P1182)

    题目选自洛谷P1182 本题解法:二分答案+贪心 思路:首先,分析题目,求最大值的最小化,直接联想到二分,So我们直接二分答案,关键是要怎么去高效的check,我们考虑一个贪心的思路,能加的就加上,不 ...

最新文章

  1. python读取大文件csv内存溢出_Python,内存错误,csv文件太大
  2. Mysql动态数据多条件查询
  3. zipkin使用_Sleuth和Zipkin进行分布式链路跟踪,一点课堂(多岸学院)
  4. Java集合(三、Hashtable)
  5. NSIS 设置系统变量
  6. unittest 单元测试
  7. 【转】百度网盘高速下载-暴力油猴脚本
  8. Python 输入整数进行排序
  9. python九九乘法表代码中的i+1的意思_python---九九乘法表代码
  10. python比对excel表数据中的差异_Excel表格中数据比对和查找的几种技巧
  11. Qemu kvm_qemu详细教程
  12. 扎心了!37岁被裁,好几个月都没有找到工作,面试大公司被婉拒,无奈只能降薪去小公司,没想到还被人嫌弃技术太落后...
  13. 【历史上的今天】3 月 25 日:Ada 语言之父诞生;第一个维基站点问世;TechTV 被收购
  14. Centos7 安装MongoDB
  15. (前端开发)java获得当前时间和第二天时间
  16. 登高车的使用注意事项及具体操作步骤有哪些?
  17. 短视频去水印(不需要下载任何app)
  18. jenkins windows slave 报错ERROR: Error cloning remote repo 'origin'
  19. 【系统收藏】黑白美女xp主题
  20. 计算机网络(经典版) - 高骞老师(2009年录制)

热门文章

  1. 离职补偿的N、N+1、2N、2N+1,到底都有什么区别?
  2. “37岁,985毕业,年薪50万,被裁掉只用了10分钟”
  3. 阿里巴巴分布式消息系统的演进之路
  4. 构建微服务体系结构的最佳实践
  5. python编写的购物网站_写一个购物商城的实例教程
  6. python基础之模块初识
  7. 使用MUI框架实现JQ购物车增减
  8. js_开发小技巧记录(一)
  9. BZOJ 3831 POI2014 Litter Bird
  10. STM32的ADC精度提高方法