NC214592. 俄罗斯方块
描述
小z刚刚小学毕业,他准备以玩游戏度过这个短暂的假期,找了许多游戏,他发现俄罗斯方块最好玩,但由于 小z比较笨,只能玩简单版的俄罗斯方块。 简单的俄罗斯方块规则如下: 有一个横为 6,高为 7 的区域(如下图),各种类型的方块将从上部掉落。 只有三种类型的方块,分别是 Type1: Type2: Type3: 玩家可以做的操作有:旋转方块,以格子为单位左右移动方块。 方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处。 当区域中某一行横向格子全部由方块填满,则该行会消失。 当方块堆到区域之上,则游戏结束。 注意:所有方块都会在下降到局域内前进行旋转和平移,不能在区域内进行操作,也就是相当于旋转和平 移好的方块直接落进区域内。 游戏中会有 n 个方块掉落,当 n 个方块放置结束或者方块超出区域之上,则游戏结束。 由于 小z太笨了,需要你算出最多消除的行数。 你能帮助他吗?
输入描述
第一行包含一个整数 n,表示掉落的方块个数。第二行有 n 个整数,每个整数 type 代表掉落的方块种类(种类按照游戏规则,即 type=1 代表一个 1*4 的方块)。
输出描述
一个数 ans,代表最多的消除行数。
示例1
输入:
3 1 1 2
输出:
2
示例2
输入:
5 1 1 2 2 2
输出:
3
C++(clang++11) 解法, 执行用时: 4ms, 内存消耗: 388K, 提交时间: 2021-01-22 15:39:42
#include<bits/stdc++.h> using namespace std; int main() { int n,x,y; cin>>n>>x>>y; if(n<=4) cout<<2; else if(n<=6) cout<<3; else if(n<=7) cout<<4; else if(n<=8) cout<<5; else if(x==1&&y==1) cout<<5; else cout<<6; return 0; }