善良的老师 (优先队列)
来源:互联网 发布:2011年网络男歌手 编辑:程序博客网 时间:2024/05/24 00:58
Description
第八届厦门理工学院程序设计大赛即将到来,Saya被要求给学弟们出一套题目。一套题目要求包含n道题,每道题都有一个难度值,难度值必须是正整数,且为了保证比赛的区分度,不能有某两道题的难度值是相同的。Saya在比赛前一天终于出了一套符合要求的题目,谢老师看了一下这套题的难度,仁慈的他觉得这套题的难度太高了,但是他又没有时间再重新出,所以他决定对这n道题进行调整。
每次他可以选择一道题进行调整,将这道题的难度值降为原来的一半(若为小数则向下取整)。他可以进行任意次这样的调整(一道题也可以调整多次),使得调整完后n道题中难度最大的那道题难度尽量小,当然前提是要先保证调整后的题目难度值必须是正整数,且不能有某两道题的难度值是相同的。
谢老师希望聪明的你能告诉他,经过调整后,满足要求的难度值最大的那道题的难度值最小是多少。
Input
第一行包括一个整数N( 2 <= N <= 20000 )。 接下来一行N个数字,每个数字ai( 0 <= ai <= 100000 )表示每道题的难度值,输入保证ai各不相同。
Output
输出一个整数,表示满足条件的最小答案。
Sample Input
69 7 13 17 5 11
Sample Output
6
思路:
先对题的难度从大到小排一遍,取难度最大的题降低难度(难度值不能相同,用标记法解决)。
然后新的题目里,又有一个新的最大难度的题,继续取难度最大的题降低难度。
当难度最大的题无法继续降低难度,即为解。
#include <cstdio>#include <algorithm>#include <queue>using namespace std;int a[20005];int b[100005];int N,i,first;int main(){priority_queue<int>q; scanf("%d",&N);for(i=0;i<N;i++){scanf("%d",&a[i]);q.push(a[i]);b[a[i]]=1;}while(1){first=q.top();while(first != 0){first=first/2;if(first ==0) break;if(b[first]==0){q.push(first);q.pop();b[first]=1;break;}}if(first == 0)break;}printf("%d\n",q.top());return 0;}
阅读全文
0 0
- 善良的老师 (优先队列)
- HDU/CDOJ-#4394/850 Digital Square/方老师开橙卡(BFS+优先队列)
- 队列的应用:优先队列
- 队列、优先队列的学习
- 优先队列的精简实现(c++)
- swun1150财务报表(优先队列的使用)
- 堆(优先队列)的灵活用法
- 优先队列的使用(模板)
- priority_queue的用法(优先队列)
- 数据结构--优先队列(堆)的实现
- HDU1896(优先队列的应用)
- 优先队列的数组实现(有序)
- priority_queue(优先队列)的用法
- 优先队列的基本用法(初步)
- zyf的现状 (BFS+优先队列)
- 优先队列的尝试 (Stall Reservations)
- 优先队列的重载应用(初学)
- 1881: wjw的树(优先队列)
- Android图片加载神器之Fresco,基于各种使用场景的讲解
- LeetCode练习_20170519
- 菜鸟教你配置mac下的java环境变量
- OpenGL:GLUT库字体设置API
- TCP/IP协议中的端口号
- 善良的老师 (优先队列)
- 关于caffe的序列 :用Caffe提取深度特征
- 2017春招笔试编程题-买帽子
- SimpleDateFormat是线程不安全的,怎样使用使其安全?
- [Spring Boot实战系列]
- C++作业6
- openjudge 3344 冷血格斗场
- 已知一个数组,每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序。请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
- wamp配置虚拟主机时可能遇到的问题