题目大意:

对于给出的n个冰激凌球的大小,满足下面的球的大小是上一个的至少2倍,对于给出的k(由k的冰激凌球才能算作一个冰激凌塔),问n个冰激凌球可以最多堆出多少个高度为k的冰激凌塔

题目分析:

对于n个冰激凌球,显然我们得知可以堆出的高度为k的塔的数量在0~[n / k]之间,这里可以通过二分遍历每一种可能,初始时二分边界l==0,r==[n / k],每次取中间值mid=(l+r)/ 2,判断mid高度为k的塔能否堆出,如果可以则尝试mid为更大,否则则尝试mid为更小时,不断二分尝试mid是否可行,而对于每个mid,我们要写一个判断函数,来判断mid座高度为k的冰激凌塔能否堆出,这里用到了贪心的思维,我们先对n个冰激凌球的大小进行从小到大的排序,然后对于mid座塔我们只要创建一个一维数组,0~mid-1放置排完序的冰激凌球的前mid个(由于已经将冰激凌球排序,取出前mid个放入这个数组即可),然后循环k-1遍(因为高度初始已经为1,只要再判断k-1层的情况即可),从编号为mid开始依次选取冰激凌球(从小到大)与这个0~mid-1个位置进行比较,如果满足是它的至少两倍则更新0~mid-1位置的冰激凌球大小,否则继续往后找一个满足的冰激凌球去替换它,完成了一层之后则继续从0~mid-1开始(共k层),假如中途出现冰激凌球已经遍历到最后,但是还是k层冰激凌塔没有完成堆叠,则返回失败,否则在结束所有k层的每个判断后返回成功

关于贪心的部分,由于数组是从小到大排序的,如果遇到一个位置不满足是它的至少两倍则将下标往后移动,前面的就被舍弃了(因为对后面的位置来说,它一定是比前面位置大的,指向该下标的冰激凌球大小如果不满足前者至少两倍,则不可能满足后者的至少两倍关系,而从小到大排序选择也是满足了最优的选择方案,先用小的试探,后用大的试探,小的一定在前面)

代码:

 #include<iostream>
#include<algorithm>
#include<cmath>
using namespace std; const int M = ;
long long ice[M];
long long update[M];
int n, k; bool judge(int x){ //x代表判断做x个塔是否可行
for(int i = ; i < x; i++){
update[i] = ice[i];
}
int cnt = x;
for(int i = ; i < k; i++){
for(int j = ; j < x; j++){
while(update[j]* > ice[cnt] && cnt < n) cnt++;
if(cnt == n) return false;
update[j] = ice[cnt];
cnt++;
}
}
return true;
} int main(){
int t;
scanf("%d", &t);
int cnt = ;
while(t--){
scanf("%d%d", &n, &k);
for(int i = ; i < n; i++) scanf("%lld", &ice[i]);
sort(ice, ice + n);
int l = ;
int r = n/k;
int ans = ;
while(l <= r){
int m = (l+r)/;
if(judge(m)){
l = m+;
ans = m;
}else{
r = m-;
}
}
printf("Case #%d: %d\n", cnt++, ans);
}
return ;
}

The 2016 ACM-ICPC Asia China-Final D. Ice Cream Tower 二分 + 贪心的更多相关文章

  1. Gym 101194D / UVALive 7900 - Ice Cream Tower - [二分+贪心][2016 EC-Final Problem D]

    题目链接: http://codeforces.com/gym/101194/attachments https://icpcarchive.ecs.baylor.edu/index.php?opti ...

  2. 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp

    QSC and Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  3. 2016 ACM/ICPC Asia Regional Shenyang Online 1003/HDU 5894 数学/组合数/逆元

    hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K ...

  4. 2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分

    I Count Two Three Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. 2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp

    odd-even number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  7. 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  8. HDU 5874 Friends and Enemies 【构造】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Friends and Enemies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  9. HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

随机推荐

  1. Mikrotik: Setup SSTP Server for Windows 10 Client

    原文: http://www.dr0u.com/mikrotik-setup-sstp-server-for-windows-10-client/ Basic how-to on SSTP for a ...

  2. Hotspot的栈

    各种类型的线程他们所需要的栈的大小其实是可以通过不同的参数来控制的: java_thread的stack_size,其实就是-Xss或者-XX:ThreadStackSize的值 compiler_t ...

  3. Scala 在挖财的应用实践

    编者按:本文是根据ArchSummit 大会上挖财资深架构师王宏江的演讲<Scala 在挖财的应用实践>整理而成. 这次分享有三个方面,一是介绍一下挖财当前的开发情况和后端的架构, 二是挖 ...

  4. MOT19数据集百度云盘

    图片按视频分的压缩包 [已失效] 链接: https://pan.baidu.com/s/1kNw6yhvqgitNK5N__WOpxw 提取码: yia4 链接: https://pan.baidu ...

  5. 重启nova-scheduler服务,报错Login was refused using authentication mechanism AMQPLAIN

    问题描述 运行 systemctl restart openstack-nova-scheduler.service 失败,查看日志报错如下: 2019-12-22 14:52:27.426 1513 ...

  6. python虚拟环境切换无效问题

    使用pycharm创建新项目,使用虚拟环境,但是进入到项目的cainiao_guoguo_health\venv\Scripts目录启动虚拟环境后,安装第三方库,却还是安装到其他环境中去了, 检查ac ...

  7. 【Kubernetes学习之四】Kubernetes可视化管理

    环境 centos 7 k8s-master 192.168.118.106 k8s-node01 192.168.118.107 k8s-node01 192.168.118.108 之前使用ku8 ...

  8. linux下安装谷歌拼音输入法

    linux下安装谷歌拼音输入法 输入以下命令,等待安装完成. sudo apt-get install fcitx 接着输入,完成安装谷歌中文输入法 sudo apt-get install fcit ...

  9. CI框架从哪里看起?CI框架怎么开始学习,CI的初始设置

    很多朋友不知道CI框架从哪里开始学起,想学一个新的框架其实并不难.只要你认真研究,自习摸索都很简单! 概述和基本配置参数 配置CI: application/config/config.php:14配 ...

  10. 【转帖】Alpha、Beta、RC、GA版本的区别

    [版本]Alpha.Beta.RC.GA版本的区别 https://www.jianshu.com/p/d69226decbfe Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测 ...