twh233打方块
题号:NC15807
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

twh233最近迷上了打俄罗斯方块
俄罗斯方块游戏界面是由一个15×10的像素格构成, 有7种不同类型的方块(如下图)

游戏开始前, 所有的像素格都是空着的
游戏开始时, 会随机出现上述7种方块之一, 然后他们缓慢下落, 在方块下落的过程中, twh233可以对正在下落的方块进行如下操作
1.顺时针旋转90° (例如: 可以变换为, 继续变换得到
2.将方块水平移动一格(不能将方块任何部分移动出游戏边界)(例如: 变换为
为了简化问题, twh233只会在灰色区域对下落的方块进行上述操作 (可以进行无限次操作), 随后让方块自由下落 (不再进行任何操作)
当正在下落的方块被其他方块或最下方的平面所阻挡无法继续下落, 这个方块将停止在这个位置
例如: 正在下落的橙色方块将下落至
当某一行所有像素格都有方块, 那么twh233将获得1分, 同时这一行将会被消除
例如: 倒数第一行和倒数第三行将被消除, twh233得到2分, 此时将变为:

twh233玩了一会游戏, 感觉到了无聊
他想知道: 对于当前的局面, 如果他能指定某个方块下落, 通过旋转和平移操作后, 他本次能得到的最高分是多少?
你能写个程序帮帮他吗?

输入描述:

第1行至第15行每一行包含10个字符, 代表游戏当前的局面
('#'代表该位置有方块, '*'代表该位置为空)

输出描述:

输出一个非负整数, 代表twh233指定某个方块下落, 通过旋转和平移操作后, 他本次能得到的最高分
示例1

输入

复制
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********
#########*
#########*
#########*
#########*

输出

复制
4

说明

此时游戏局面为: 
twh233指定下落, 将得到如下局面: , 所以他最多能得到4分
示例2

输入

复制
**********
**********
**********
**********
**********
**********
**********
**********
**#***#***
*###*###**
#########*
*#######**
**#####***
***###****
****#*****

输出

复制
1

说明

此时游戏局面为:
twh233指定下落, 将得到如下局面: , 所以他最多能得到1分
示例3

输入

复制
**********
**********
**********
**********
**********
###***##**
#****#**#*
###**#**#*
#****#**#*
#*****##**
#****###**
#****#**#*
#****#**#*
#****#**#*
###**###**

输出

复制
0

说明

此时游戏局面为:  , 无论接下来是哪一个方块下落, twh233都不能得分
示例4

输入

复制
**********
**********
**********
**********
**********
#########*
**#**#**#*
######**#*
#**#****#*
######**#*
#*#######*
#*#**##*#*
#######*#*
**##**#*#*
**#######*

输出

复制
1

说明

此时游戏局面为: 

备注:

数据保证: 灰色区域部分不包含任何方块, 并且当前局面不能消除任何一行