一副扑克牌有n张牌。一般你买的一副新扑克牌里除了这n张牌外还会有一些张特殊的牌,如
果你不小心弄丢了n张牌中的某一张,就可以用特殊牌来代替,但是如果你弄丢两张的话就
没有办法了,因为特殊牌上的图案是一样的。
现在你得到了很多扑克牌,准确来说,n种牌你各有a1、a2、……、an张,同时你还有b张特
殊牌,现在你需要从这些牌中整理出若干副牌供大家使用。整理出的一副牌可以由n种普通
牌各一张组成,也可以由n-1种普通牌各一张再加一张特殊牌组成。
请你设计出一种方案,整理出尽可能多的牌。
Input
输入包括2行
第一行给出n和b1
第二行给出a1,a2…an。
1<=n<=1000000牌的数量<=10^6
Output
输出最多能整理出的牌的副数。
Sample Input
5 5
5 5 5 5 5
Sample Output
6

大概思路:模拟一下这个样例
5 4
1 2 3 4 5
我们就能知道,应该尽量将特殊牌分给数量最少的那种牌。
比如上面这个样例
第一轮:用一张特殊牌代替1,然后第2到第五种牌各出一张
第二轮:用一张特殊牌代替1,然后第2到第五种牌各出一张
第三轮:用一张特殊牌代替2,然后第1,第3,第4,第6种牌各出一张
game over!

程序实现环节
发现整个过程,我们需要不断去找最小值,于是想到了heap
进而发现我们如果每次使用一张特殊牌代表某种牌,其它牌各出一张即相当于它们的数字都要减少一个1。这个操作起来是有点麻烦的,要将N-1个数字统统减1,复杂度是N平方的。于是我们设一个变量ans,到目前为止每种牌要减去多少个。
于是对于
1 2 3 4 5
第1轮,最小值为1,给它加上1,得到新数列2 2 3 4 5,ans=1
第2轮,最小值为2,给它加上1,得到新数列2 3 3 4 5,ans=2
第3轮,最小值为2,给它加上1,得到新数列3 3 3 4 5,ans=3
注意此时数列中最小的两个数字均为3,ans也等于3
说明最小的两个数字3,其实真实的值应该是为0的。
于是游戏结束,因为游戏如果再要继续下去的话,则要派出两张特殊牌分别给这两种牌,与题意不合。
最后注意输出结果应该为堆顶元素的值,而不是ans。
这样随便跑一个样例就知道,比如
5 1
5 5 5 5 5
最终结果应该是5,而不是1

#include<queue>
#include<cstdio>
#include<cstring>
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int a[maxn],ans=0;
priority_queue<int,vector<int>,greater<int> >q; int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main(){
int n=read(),b=read();
for(int i=1;i<=n;i++)a[i]=read(),q.push(a[i]);
for(int i=1;i<=b;i++)
{ ans++;
int x=q.top();//出现次数最小的
q.pop();
x++;
q.push(x); //相当于它加了1
int x1=q.top();
q.pop();
int x2=q.top();
q.pop();
q.push(x1);//记得丢回去
q.push(x2);
if(ans==x2&&ans==x1)
break;
}
printf("%d\n",q.top());
return 0;
}

  

poker的更多相关文章

  1. uva131 The Psychic Poker Player

    The Psychic Poker Player Time Limit: 3000MS     64bit IO Format: %lld & %llu Description In 5-ca ...

  2. UVa12298 Super Poker II(母函数 + FFT)

    题目 Source http://acm.hust.edu.cn/vjudge/problem/23590 Description I have a set of super poker cards, ...

  3. HDU 4759 Poker Shuffle

    Poker Shuffle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  4. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)C. Bear and Poker

                                                  C. Bear and Poker                                     ...

  5. ZOJ 1111 Poker Hands

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1111 A poker hand consists of 5 ca ...

  6. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) A. Bear and Poker 分解

    A. Bear and Poker Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/573/pro ...

  7. ZOJ1111:Poker Hands(模拟题)

    A poker deck contains 52 cards - each card has a suit which is one of clubs, diamonds, hearts, or sp ...

  8. 如何生成一副Poker

    import java.util.LinkedList;import java.util.Random;//扑克类class Poker{    String color;//花色    String ...

  9. bzoj2487: Super Poker II

    Description I have a set of super poker cards, consisting of an infinite number of cards. For each p ...

  10. One Card Poker

    qsc oj 题目 提交 比赛 小组 排名 帮助 Mactavish 题目 我的提交 One Card Poker 发布时间: 2017年2月14日 14:02   最后更新: 2017年2月14日 ...

随机推荐

  1. Solaris 11中配置基于link的IPMP

    http://blog.itpub.net/29960937/viewspace-1347901/ Tips: Record and feedback errors you have encounte ...

  2. python变量与常量内容:

    ''' python变量与常量内容: ''' # 变量:定义世间万物变化的状态 ''' height 180 weight 140 age 18 tree_name yuyang ''' # prin ...

  3. 解决:java compiler level does not match the version of the installed java project facet错误

    java compiler level does not match the version of the installed java project facet错误的解决 因工作的关系,Eclip ...

  4. SpringMVC的数据转换&&数据格式化&&数据校验

    1 SpringMVC的数据绑定流程 SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象. ...

  5. java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类

    1.String类 1.1String类的概念和储存结构: (1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象 String s1 = new String(&quo ...

  6. contenteditable 光标定位到最后

    在Vue做项目时,做了一个div[contenteditable=true]的组件作为文本输入框 在非手动输入值后,光标会丢失,经测试以下这段代码可用,直接将光标定位到最后 function keep ...

  7. postman—创建collection,执行collection和批量执行

    接口测试中,可以在 Postman 逐个创建请求.但当请求逐渐增多时,如果我们不采取任何措施管理,散乱的请求维护起来就比较麻烦了.这个时候我们可以创建测试集 Collection 来对这些请求进行管理 ...

  8. k8s-dashboard搭建

    一,简单搭建,未使用ssl证书,可载谷歌浏览器访问 1,拉取镜像 docker pull gcrxio/kubernetes-dashboard-amd64:v1.10.1 docker tag gc ...

  9. [BZOJ5463][APIO2018]铁人两项:Tarjan+圆方树

    分析 根据题目中的要求,从\(s\)出发前往\(f\)一定可以,并且只可能经过这两个结点所在的点双连通分量和它们之间的点双连通分量,因此切换点\(c\)只能从这些点中选取. 建出圆方树后,因为圆方树上 ...

  10. [BZOJ2791]:[Poi2012]Rendezvous(塔尖+倍增LCA)

    题目传送门 题目描述 给定一个有n个顶点的有向图,每个顶点有且仅有一条出边.每次询问给出两个顶点${a}_{i}$和${b}_{i}$​​,求满足以下条件的${x}_{i}$和${y}_{i}$:   ...