G - 土耳其冰淇凌 Gym - 101194D(二分答案 + 贪心检验)
熊猫先生非常喜欢冰淇淋,尤其是冰淇淋塔。一个冰淇淋塔由K个冰淇淋球堆叠成一个塔。为了使塔稳定,下面的冰淇淋球至少要有它上面的两倍大。换句话说,如果冰淇淋球从上到下的尺寸是A0,
A1, A2,···,AK 1,那么A0×2 ≤ A1, A1 × 2 ≤ A2,等等。
有一天,熊猫先生在街上走着,发现一家卖冰淇淋球的商店。冰淇淋球共有N个,大小分别为B0、B1、B2、··、BN−1。潘达先生想知道这些球最多能做出的冰淇淋塔数量。
Input 输入的第一行给出了测试用例的数量,接下来是T ,
T组测试用例。每个测试用例都以一个由2个整数组成的行开始,N是商店中冰淇淋球的数量,K是形成一个冰淇淋塔所需的冰淇淋球的数量。下一行包含N个整数,表示商店中各个冰淇淋球的大小。
Output 对于每个测试用例,输出一行包含“Case #x: y”,其中x是测试用例号(从1开始),y是冰淇淋塔的最大数量。
Limits
• 1 ≤ T ≤ 100.
• 1 ≤ N ≤ 3 × 105.
• 1 ≤ K ≤ 64.
• 1 ≤ Bi ≤ 1018.
Sample Input
3
4 2
1 2 3 4
6 3
1 1 2 2 4 4
6 3
1 1 2 2 3 4
Sample Output
Case #1: 2
Case #2: 2
Case #3: 1
思路
题意:给我们n个不同尺寸的球,让我们用这些球,组成 “球塔”,又给我们了每个球塔必须有k个球组成,相邻的两个球之间的尺寸是 下边球的尺寸至少要是上边的球的尺寸的两倍,问这n个球最多能形成的多少个 “球塔”?
分析:然我们球最多数量,我们可以用二分去假设某个答案,假设完这个答案之后我们要看看,这个答案能 被n个小球组成,这个时候我们就需要写个 Judge函数来检验了
- 对于这个检验主要是用 "贪心" 的思想,首先我们假设 能形成 m个“球塔”,那么 对于这个m个球塔最上边的球,
一定是前m小的球
,这样我们 在剩下的小球继续 以贪心的思想继续放置就行了
- 对于这个检验主要是用 "贪心" 的思想,首先我们假设 能形成 m个“球塔”,那么 对于这个m个球塔最上边的球,
代码
#include<iostream>
#include<cmath>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int Len = 3e5 + 10;
int n, m;
ll ar[Len];
ll br[Len];
bool Judge(int mid)
{
for(int i = 1; i <= mid; i ++)
br[i] = ar[i];
for(int i = mid + 1, j = mid + 1; i <= mid * m; i ++)
{
while(ar[j] < br[i-mid] * 2 && j <= n)
j ++;
if(j == n + 1) return false;
br[i] = ar[j ++];
}
return true;
}
int main()
{
/* freopen("A.txt","r",stdin); */
int t, Case = 1;
scanf("%d", &t);
while(t --)
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i ++)
scanf("%lld", &ar[i]);
sort(ar + 1, ar + 1 + n);
int l = 0, r = n/m;
int ans;
while(l <= r)
{
int mid = (l + r) >> 1;
if(Judge(mid))
l = mid + 1, ans = mid;
else
r = mid - 1;
}
printf("Case #%d: %d\n",Case ++, ans);
}
return 0;
}
总结
- 对于这种让求最大组成数量的题,一定要想一下“
能否用二分答案
” - 还是对贪心思想掌握的不行,在做这一题的时候就完全没想到这个贪心思路
G - 土耳其冰淇凌 Gym - 101194D(二分答案 + 贪心检验)的更多相关文章
- BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心
BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心 Description Bessie烘焙了一块巧克力蛋糕.这块蛋糕是由R*C(1 <= R,C ...
- 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心
题目链接 题意 给你一个N*M的矩阵 (N,M <=2000) 把他分成两部分 使两部分的极差较大的一个最小 求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...
- 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)
P1800 software_NOI导刊2010提高(06) 标签 二分答案 难度 普及/提高- 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每 ...
- Gym - 101908G 二分答案+最大流
After the end of the truck drivers' strike, you and the rest of Nlogônia logistics specialists now h ...
- Gym 100886J Sockets 二分答案 + 贪心
Description standard input/outputStatements Valera has only one electrical socket in his flat. He al ...
- 疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- B1816 扑克牌 二分答案 + 贪心
这个题我一开始想到了二分答案,但是去写了另一个算法,用优先队列直接模拟,最后GG了...因为我没考虑每个套牌只能有一个joker...尴尬. 后来二分答案,然后暴力验证就行了. 题干: Descrip ...
- 【二分答案+贪心】UVa 1335 - Beijing Guards
Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the Imperial City ...
- 【二分答案+贪心】解决“最小值最大”问题(UVa 12124 - Assemble)
Problem A - Assemble Time limit: 2 seconds Recently your team noticed that the computer you use to p ...
随机推荐
- Java实现生产者消费者(一)
问题描述:生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时 ...
- 01 极简Linux操作系统发展历史
Unix操作系统的诞生 1965 年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘.显示器),连接一台电脑 ...
- [IOI1994] 时钟 - 搜索
考虑九个安排在 \(3 \times 3\) 矩阵中的时钟,每个时钟只会指向 \(3,6,9,12\) 点.有 \(9\) 种操作方式,每种操作方式规定了其固定的操作对象集合,将这几个时钟都往后拨 \ ...
- ECMAScript进化史(1):话说Web脚本语言王者JavaScript的加冕历史
互联网起火-Web时代的来临 在行文之前,反手就安利一下<浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战>. 浏览器始祖NCSA Mosaic在1993年1月发布(于1992 ...
- HTTP/1.1 与 HTTP/2.0
HTTP/1.1 与 HTTP/2.0 HTTP/1.1 持久连接 非持久连接
- Spring Boot从入门到精通(九)整合Spring Data JPA应用框架
JPA是什么? JPA全称Java Persistence API,是Sun官方提出的Java持久化规范.是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. ...
- numpy——>数组拼接np.concatenate
语法:np.concatenate((a1, a2, ...), axis=0) 1.默认是 axis = 0,也就是说对0轴(行方向)的数组对象,进行其垂直方向(axis=1)的拼接(即数据整行整行 ...
- js 数组 方法
instanceof 检测一个对象是否是数组;(用来对付复杂数据类型;)// 简单数据类型 typeof ;A instanceof B // A是不是B造出来的;例: var arr = [1,2, ...
- 【转】sublime text 2 快捷键大全
Ctrl+L 选择整行(按住-继续选择下行) Ctrl+KK 从光标处删除至行尾 Ctrl+Shift+K 删除整行 Ctrl+Shift+D 复制光标所在整行,插入在该行之前 Ctrl+J 合并行( ...
- H5新特性之语义化标签
一.为什么要增加新的语义化标签 在HTML 5出来之前,我们用div来表示章节,但是这些div都没有实际意义,这样的布局方式使我们的结构不够清晰,于是语义化标签应运而生. 二.何为语义化标签 顾名思义 ...