upc组队赛1 闪闪发光 【优先队列】
闪闪发光
题目描述
一所位于云南昆明的中医药本科院校--云南中医学院。
因为报考某专业的人数骤减,正面临着停招的危机。
其中有九名少女想到一条妙计——成为偶像,
只要她们成为偶像,学校的名气便会增加,而报考的人数亦会上升。
就这样,九位个性鲜明的少女决定一起努力成为偶像。
希望可以凭借偶像的名气增加生源来挽救自己所喜爱的专业,让自己的学校闪闪发光。
她们为了成为偶像,第一步对于她们来说是减肥!
这里有n个重物,第i个重物的重量是2^{w_i}。她们每天任务要完成的重量是n个重物的重量和。
每次举重的重量和必须是2的幂,重物数量不要求。
但是为了方便,要使举重的次数最少。
输入
多组数据。
每组数据第一行一个整数n。(1 <= n <= 10^6)
第二行有n个整数w_1,w_2,...,w_n。(0 <= w_i <= 1000000)
输出
输出最少的举重次数。
样例输入
5
1 1 2 3 3
样例输出
2
提示
1,1,2一组;
3,3一组。
题解
把小的数可以组合的组合起来,不能继续组合的数量就是答案
用优先队列就很简单了;
弹出队首x,如果和接下来的队首相等 就继续弹出队首,将x+1入队
如果不相等 或者队列已经空了 那就计数++;
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
#define all(x) x.begin(),x.end()
#define readc(x) scanf("%c",&x)
#define read(x) scanf("%d",&x)
#define read2(x,y) scanf("%d%d",&x,&y)
#define read3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define print(x) printf("%d\n",x)
#define mst(a,b) memset(a,b,sizeof(a))
#define lowbit(x) x&-x
#define lson(x) x<<1
#define rson(x) x<<1|1
#define pb push_back
#define mp make_pair
#define PI acos(-1.0)
const int maxn = 1e6+5;
int n;
int w[maxn];
int ans;
int main(){
priority_queue<int,vector<int>,greater<int>> q;
while(read(n)!=EOF){
while(!q.empty()) q.pop();
for(int i = 0 ; i < n; i++){
read(w[i]);
q.push(w[i]);
}
ans = 0;
while(!q.empty()){
int p = q.top();
q.pop();
if(p != q.top() || q.empty()){
ans ++;
// cout << p <<endl;
}
else{
q.pop();
q.push(p+1);
}
}
print(ans);
}
}
队友用数组过的,思想是一样的,需要注意的地方是数组需要开的够大
#include<bits/stdc++.h>
using namespace std;
#define memset(x,y) memset(x,y,sizeof(x))
#define memcpy(x,y) memcpy(x,y,sizeof(y))
#define pri(x) printf("%d\n",x)
#define pri2(x,y) printf("%d %d\n",x,y)
#define pris(x) printf("%s\n",x)
#define prl(x) printf("%lld\n",x)
#define all(x) x.begin(),x.end()
#define readc(x) scanf("%c",&x)
#define read(x) scanf("%d",&x)
#define read2(x,y) scanf("%d%d",&x,&y)
#define read3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define print(x) printf("%d\n",x)
#define lowbit(x) x&-x
#define lson(x) x<<1
#define rson(x) x<<1|1
#define pb push_back
#define mp make_pair
#define INF 0x3f3f3f3f
typedef pair<int,int> P;
typedef long long LL;
typedef long long ll;
const double eps=1e-8;
const int MAXN=1e6+7;
const int maxn=5000000+10;
const int maxm = 1;
const int mod=1e9+7;
int n;
int T;
int ans = 0;
int w[maxn];
int x;
int main()
{
while(read(n)!=EOF)
{
int cnt = 0;
memset(w,0);
for(int i = 0 ; i < n; i++){
read(x);
w[x] ++;
}
for(int i = 0; i < 5000000+5; i++)
{
if(w[i] % 2 == 1) cnt++;
w[i+1] += w[i] / 2;
}
printf("%d\n",cnt);
}
return 0;
}
upc组队赛1 闪闪发光 【优先队列】的更多相关文章
- upc组队赛3 Chaarshanbegaan at Cafebazaar
Chaarshanbegaan at Cafebazaar 题目链接 http://icpc.upc.edu.cn/problem.php?cid=1618&pid=1 题目描述 Chaars ...
- upc组队赛1 过分的谜题【找规律】
过分的谜题 题目描述 2060年是云南中医学院的百年校庆,于是学生会的同学们搞了一个连续猜谜活动:共有10个谜题,现在告诉所有人第一个谜题,每个谜题的答案就是下一个谜题的线索....成功破解最后一个谜 ...
- upc组队赛1 不存在的泳池【GCD】
不存在的泳池 题目描述 小w是云南中医学院的同学,有一天他看到了学校的百度百科介绍: 截止到2014年5月,云南中医学院图书馆纸本藏书74.8457万册,纸质期刊388种,馆藏线装古籍图书1.8万册, ...
- upc组队赛1 黑暗意志【stl-map】
黑暗意志 题目描述 在数千年前潘达利亚从卡利姆多分离之时,迷雾笼罩着这块新形成的大陆,使它不被外来者发现.迷雾同样遮蔽着这片大陆古老邪恶的要塞--雷神的雷电王座.在雷神统治时期,他的要塞就是雷电之王力 ...
- upc组队赛1 流连人间的苏苏
流连人间的苏苏 题目描述 苏苏在做红尘仙的任务时,发现坐落于风景秀丽.四季如春的昆明市的云南中医学院. 没过多久,苏苏就喜欢上了这个学校.以致于苏苏忘了回涂山的时间,现在她只剩下d天的时间待在云南中医 ...
- upc组队赛18 THE WORLD【时间模拟】
THE WORLD 题目链接 题目描述 The World can indicate world travel, particularly on a large scale. You mau be l ...
- upc 组队赛18 STRENGTH【贪心模拟】
STRENGTH 题目链接 题目描述 Strength gives you the confidence within yourself to overcome any fears, challeng ...
- upc组队赛17 Stone Game【极小值】
Stone Game 题目链接 题目描述 Alice and Bob are always playing game! The game today is about taking out stone ...
- upc组队赛17 Greatest Common Divisor【gcd+最小质因数】
Greatest Common Divisor 题目链接 题目描述 There is an array of length n, containing only positive numbers. N ...
随机推荐
- hadoop2.4.1 伪分布
最终的 /etc/profile :#在文件最后添加 # /etc/profile # System wide environment and startup program ...
- sqlserver中查询表字段的sql语句
sqlserver中的表信息字段信息这些东西也是放到系统表中的,以下sql语句用于查询某表的字段信息. select t1.id object_id,t1.name object_name,t2.va ...
- 在liunx系统里面进行复制文件的时候报错:cp:omitting directiory
在复制的时候执行命令:cp /TEST/test1 /TEST/test2 结果报错:cp:omitting directior 报错原因:test1下面还有文件,不能删除 解决办法:cp -r / ...
- HTML5语义化元素
语义化元素:有意义的元素. 对语义化的理解: 正确的标签做正确的事情: HTML5语义化元素让页面内容结构化清晰: 便于开发人员阅读,理解,维护: 搜索引擎爬虫可以依赖语义化元素来确定上下文和每个关键 ...
- Vue系列之 => 动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring boot jackson
Spring boot 所引用的包里面包含 jackson-databind-2.8.3.jar jackson-annotations-2.8.3.jar jackson-core-2.8.3.ja ...
- word2vec原理知识铺垫
word2vec: 词向量计算工具====>训练结果 词向量(word embedding) 可以很好的度量词与词的相似性,word2vec为浅层神经网络 *值得注意的是,word2vec是计算 ...
- MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
最近做数据备份的时候发现了有个很严重的问题,那就是数据丢失(最后证明没丢,是别的问题造成的). 问题如下: 我通过两种方式在两个mongoDB集群中,对一组collection进行备份,最后2个备份数 ...
- linux 3
-- Linux -- 开心的一天 vi 所有的 unix like 系统都会内置 vi 文本编辑器 vim 较多使用的,可以主动的以字体颜色辨别语法的正确性,方便程序设计 vi/vim 的使用 ...
- [转载]Oracle数据库 sql%found,sql%notfound,sql%rowcount
sql%found,sql%notfound,sql%rowcount 在执行DML(insert,update,delete)语句时,可以用到以下三个隐式游标(游标是维护查询结果的内存中的一个区域, ...