【10.29 牛客普及(六)】 小球下落 题解

本文详细解析了小球下落的题目,通过将图像分解成独立的小块来解决。分析指出,最上方的球移动到最下方的空格是最佳策略,不需要考虑球的移动顺序,只需计算空格和球的行数之差作为答案。给出了解题思路及代码实现。
摘要由CSDN通过智能技术生成

【10.29 牛客普及(六)】 小球下落 题解

题目

在这里插入图片描述
在这里插入图片描述


解题思路

题意
图中有球,空格,障碍物
尽量将球下移
下移的行数即为解

分析
不想看的可以自己看标,也有注释,这里是思路啦
我们可以将图分解成一小块一小块
如果有两个障碍物如图:

.x    x.    ..    
x.    .x    xx

说明tm上面的球最多下降到tm的上面
这就是独立的一小块

原样例
oo
.o
.x
x.
..
oo
.o
x.
..
x.
最后结果
..
oo
ox
x.
..
..
..
x.
oo
xo

小球是没有编号
怎么移都行
有人纠结怎么移最优,其实不需要,你移,他不能移,和他移,你不移是一样的
只求最后结果即可

考虑贪心
肯定是最上面的球
移到最下面的空格最优
不用考虑让位,ta帮你移了和你移了,贡献是一样的

那我们就只需要
保存每个球和空格的行数
求的是能下降多少位,列不需要考虑

当碰到上述被截成小块的情况
累加球的行数和空格的行数
球是从前往后,因为越先进对越小
如果出现当前空格的行数小于当前球
不再累加
最后对答案的贡献就是空格和-球和

每做一个小块
要记得清0


代码

#include<iostream>
#include<cstdio>
using namespace std;
int n,ans,t,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值