The 2016 ACM-ICPC Asia China-Final D. Ice Cream Tower 二分 + 贪心


题目大意:
对于给出的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 二分 + 贪心的更多相关文章
- 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 ...
 - 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) ...
 - 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 ...
 - 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 ...
 - 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 ...
 - 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 ( ...
 - 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 ...
 - 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 ...
 - 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 ...
 
随机推荐
- React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值
			
创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...
 - 1-6docker数据共享与持久化
			
1.在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种⽅式: 数据卷(Data Volumes) 挂载主机⽬录 (Bind mounts) 2.数据卷 数据卷 是⼀个可供⼀个或多个 ...
 - 自定义标签&JSON数据处理
			
最近几日去参加一些面试,多多少少有一些收获. 现将遇到的一些面试题,做一下分析和总结. 1.使用原生JS,不能使用递归,查找dom中所有以“<com-”开头的自定义标签tagName. < ...
 - centos7下vs code编辑器字体与windows版本同步设置-安装中文字体,美化vscode
			
"editor.fontFamily": "Consolas, 'Courier New', monospace" 从window10系统中复制出以上字体,到C ...
 - 【转帖】普通程序员如何转向AI方向
			
普通程序员如何转向AI方向 https://www.cnblogs.com/subconscious/p/6240151.html 眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智 ...
 - golang学习  ---defer语句
			
golang语言defer特性详解 defer语句是go语言提供的一种用于注册延迟调用的机制,它可以让函数在当前函数执行完毕后执行,是go语言中一种很有用的特性.由于它使用起来简单又方便,所以深得go ...
 - Firefox 无法播放 youtube
			
今天 firefox (目前是 67,之前刚装了 62 的时候也是这个问题..)升级之后,莫名其妙没法使用 youbube 了. 尝试了很多方法,我觉得可能是这条起作用了: 1. 关闭所有网页. 2. ...
 - K8S学习笔记之Grafana App for Kubernetes的配置
			
Grafana有一套针对Kubernetes监控的APP,和Grafana-Zabbix App类似,但是配置咋一看比较麻烦,主要参数都是来自K8S. 这款APP的详细介绍请参考Grafana App ...
 - 封装:Cmd命令调用和常用命令
			
原文:封装:Cmd命令调用和常用命令 一.Cmd命令调用方法 1.静态方法调用 class Program { static void Main(string[] args) { // Todo :打 ...
 - The instance of entity type 'Menu' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.
			
这里记录一个在使用.net core中ef core执行数据库操作时遇到的问题: 我在代码中使用DbContext下的Update方法准备将更改后的数据像这样步到数据库: _context.Menus ...