【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,