poker
一副扑克牌有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的更多相关文章
- uva131 The Psychic Poker Player
The Psychic Poker Player Time Limit: 3000MS 64bit IO Format: %lld & %llu Description In 5-ca ...
- UVa12298 Super Poker II(母函数 + FFT)
题目 Source http://acm.hust.edu.cn/vjudge/problem/23590 Description I have a set of super poker cards, ...
- HDU 4759 Poker Shuffle
Poker Shuffle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)C. Bear and Poker
C. Bear and Poker ...
- ZOJ 1111 Poker Hands
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1111 A poker hand consists of 5 ca ...
- 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 ...
- ZOJ1111:Poker Hands(模拟题)
A poker deck contains 52 cards - each card has a suit which is one of clubs, diamonds, hearts, or sp ...
- 如何生成一副Poker
import java.util.LinkedList;import java.util.Random;//扑克类class Poker{ String color;//花色 String ...
- bzoj2487: Super Poker II
Description I have a set of super poker cards, consisting of an infinite number of cards. For each p ...
- One Card Poker
qsc oj 题目 提交 比赛 小组 排名 帮助 Mactavish 题目 我的提交 One Card Poker 发布时间: 2017年2月14日 14:02 最后更新: 2017年2月14日 ...
随机推荐
- 后台运行任务nohup xxxxxx &
转载:https://www.cnblogs.com/baby123/p/6477429.html https://blog.csdn.net/davidhzq/article/details/102 ...
- mapper映射文件配置之insert、update、delete(转载)
原文地址:http://www.cnblogs.com/dongying/p/4048828.html 在mapper文件中,以mapper作为根节点,其下面可以配置的元素节点有: select, i ...
- java ArrayList迭代过程中删除
第一种迭代删除方式: 第二种迭代删除方式: 第三种迭代删除: 第四种迭代删除: 第五种迭代删除: 第六种: ArrayList中remove()方法的机制,首先看源码: 真正的删除操作在fastRem ...
- 对vue的solt的理解
//父 <children> <span>12345</span>//这边不会显示 </children> //子 components: { chil ...
- lazarus 连接mysql5.7 (deepin linux)
在mysql下载站点下载驱动文件:libmysqlclient20_5.7.28-1debian9_amd64 64位 ,1.5M 安装后,lazarus IDE 就可以直接连MYSQL ...
- C# 向上取整数
PageCount = personInfodb.get_count(selected_id); //数据总数 PageCount = (int)Math.Ceiling(PageCount / (P ...
- BZOJ 4488: [Jsoi2015]最大公约数 暴力 + gcd
Description 给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列 {Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L, ...
- win7如何设置以管理员身份运行
一.对所有程序以管理员身份运行 1.右键单击桌面“计算机”,选择“管理” 2.在页面左侧,依此打开“计算机管理(本地)→ 系统工具→本地用户和组→用户”,在右侧找到“Administrator”,双击 ...
- CodeForces 1100F Ivan and Burgers
CodeForces题面 Time limit 3000 ms Memory limit 262144 kB Source Codeforces Round #532 (Div. 2) Tags da ...
- 一个ros包依赖另一个ros包提供的库
背景: 编写一个点云配准的ros包,记为A,在其中打算使用多种点云配准算法. 同一个ros工作空间下有另一个ros包,记为B,B中提供了几种点云配准算法,并将它们都编译成一个库文件并安装在工作空间中. ...