Bacteria (Gym - 101911C)
2018-2019 ACM-ICPC, NEERC, Southern Subregional Contest, Qualification Stage
Bacteria
题意:像2048这个游戏,相同的两个可以合并在一起变成一个数(数值变成二倍),但是现在有一些数只有一个,所以需要添加一个和这些数相同的,让他们可以合并在一起,现在问最小添加多少个数可以把所有的数合成一个。
题解:我感觉类似于数据结构中的哈夫曼编码,最小编码,所以每次取最小的两个,如果这两个相等,就合并然后放进去,如果不相同,那就先判断2倍最小与次小的关系,如果是 2 * x1 > x2,那就没有答案了,如果不是那么 ans++。( 不过当时没想到,就极限了一下,如果ans大于某个值就默认了不可以了。)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
while(~scanf("%lld",&n))
{
priority_queue<ll, vector<ll>, greater<ll> > q;
ll x;
for(int i = 0; i < n; i ++)
{
scanf("%lld", &x);
q.push(x);
}
ll cnt = 0;
ll x1, x2;
ll f = 0;
if(n == 1) {printf("0\n");continue;}
while(!q.empty())
{
x1 = q.top();
q.pop();
if(!q.empty())
{
x2 = q.top();
if(x1 == x2)
{
x1 = x1 + x2;
q.pop();
q.push(x1);
}
else {
x1 = 2 * x1;
q.push(x1);
cnt ++;
}
}
else {
break;
}
if(cnt > 3e5) {f = 1;break;}
}
if(f==0)printf("%lld\n",cnt);
else printf("-1\n");
}
return 0;
}
Bacteria (Gym - 101911C)的更多相关文章
- Kernel Knights (Gym - 101480K)
题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; int a[200005]; //存放原始 ...
- Digit Division(排列组合+思维)(Gym 101480D )
题目链接:Central Europe Regional Contest 2015 Zagreb, November 13-15, 2015 D.Digit Division(排列组合+思维) 题解: ...
- 2017 United Kingdom and Ireland Programming(Gym - 101606)
题目很水.睡过了迟到了一个小时,到达战场一看,俩队友AC五个了.. 就只贴我补的几个吧. B - Breaking Biscuits Gym - 101606B 旋转卡壳模板题.然后敲错了. 代码是另 ...
- Security Guards (Gym - 101954B)( bfs + 打表 )
题意及思路 题目主要是讲先给出所有guard的位置,再给出所有incidents的位置,求出guard到达每个incident处最小的steps,其中guard每次可以向四周8个方向移动. 思路:对于 ...
- Book Borders (Gym - 101480B)(二分)
题目链接 题解:用二分查询一下每次满足长度的下一个加上它的长度. #include <bits/stdc++.h> using namespace std; typedef long lo ...
- Gym Class(拓扑排序)
Gym Class Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- codeforces gym #102082C Emergency Evacuation(贪心Orz)
题目链接: https://codeforces.com/gym/102082 题意: 在一个客车里面有$r$排座位,每排座位有$2s$个座位,中间一条走廊 有$p$个人在车内,求出所有人走出客车的最 ...
- Gym 101246J Buoys(三分查找)
http://codeforces.com/gym/101246/problem/J 题意: 给定x轴上的n个点的坐标,按顺序从左到右给出,现在要使得每个点的间距相同,可以移动每个点的坐标,但是不能改 ...
- Gym 100712L Alternating Strings II(单调队列)
题目链接 Alternating Strings II 题意是指给出一个长度为n的01串,和一个整数k,要求将这个01串划分为很多子串(切很多刀),使得每个子串长度不超过k,且每个字串不是01交替出现 ...
随机推荐
- shell 学习笔记4-shell内置变量命令
一.shell 的一些内置命令 常用的一内部命令有:echo.eval.exec.export.read.shift 1.echo命令-在屏幕中输出信息 1)说明 格式:echo args #< ...
- jQuery的淡入和淡出简单介绍
在jQuery中的一些特效中,可以通过四个方法来实现元素的淡入淡出,这四个方法分别是:fadeIn().fadeOut().fadeToggle() 以及 fadeTo(),下面为分别为大家介绍各个方 ...
- English-培训3-Please call me Beth
- mysql limit和offset用法
limit和offset用法 mysql里分页一般用limit来实现 1. select* from article LIMIT 1,3 2.select * from article LIMIT 3 ...
- 每日一题-——LeetCode(111)二叉树的最小深度
题目描述: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 思路一: 把每一层的结点加入到队列,每一层i+1,到下一层时,把上一层在队列中的结点都弹出,按从 ...
- visual studio 使用技巧——vs技巧
vs(visual studio)使用技巧: 1,vs有多个断点时,调试时,如果不想命中断点,可以在调试菜单下禁用所有断点: 2,高版本(比如vs2015)的vs支持javascript中使用F12转 ...
- Stock Exchange (最大上升子子串)
/* 题意: 给定L个整数A1,A2,...,An,按照从左到右的顺序选出尽量多的整数, 组成一个上升序列(子序列可以理解为:删除0个或者多个数,其他的数的吮吸不变). 例如,1,6,2,3,7,5, ...
- hihocoder 1931 最短管道距离
描述 在一张2D地图上有N座城市,坐标依次是(X1, Y1), (X2, Y2), ... (XN, YN). 现在H国要修建一条平行于X轴的天然气主管道.这条管道非常长,可以认为是一条平行于X轴的直 ...
- 回调函数(callback)
回调函数(callback) A "callback" is any function that is called by another function which takes ...
- Python+request 使用pymysql连接数据库mysql的操作,基础篇《十一》
笔记记录: (1)pymysql中所有的有关更新数据(insert,update,delete)的操作都需要commit,否则无法将数据提交到数据库,既然有了commit(),就一定有对应的rollb ...