【SSL】盒子

这篇博客介绍了如何解决一个关于堆叠盒子的问题。给定每个盒子的强度,任务是确定将所有盒子堆叠在一起所需的最少堆数。博主提供了一个解题思路,包括先排序盒子的强度,然后通过计数器计算最少堆数。该问题适用于中等规模的数据集,最高可达500000个盒子,每个盒子的强度不超过1亿。
摘要由CSDN通过智能技术生成

盒子


Description

小D在玩堆盒子的游戏,每个盒子有一个强度,代表它上方最多能堆多少个
盒子。由于盒子都是一样大的,所以不能在一个盒了上并列放超过一个盒子。
现在小D有n个盒子,第i个盒子的强度为xi。

小D想知道,如果他要把这些盒子全部堆起来,至少要堆多少堆。

Input

第一行读入一个整数n,代表小D有的盒子个数。
第二行读入n个整数,第i个整数xi表示第i个盒了的强度。

Output

共一行,一个整数表示小D至少要堆多少堆。

Sample Input

5
0 2 1 1 2

Sample Output

2

Hink

对于20%的数据,n≤10;
对于50%的数据,n≤1000;
对于100%的数据,n≤500000,xi≤1000000000。

解题思路

先把盒子的强度从小到大排序,盒子的状态全部改为1(表示没有加进去 ),然后用一个计数器,计数器先清零。然后从第一个开始,如果盒子的强度大于计数器,计数器加1,盒子的状态清零(表示已经加进去了)。所有数全部过一遍,过完一次总数加1,计数器清零,知道盒子的状态全部为零结束。

#include<iostream>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const</
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值