博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[模拟赛] StopAllSounds
阅读量:5265 次
发布时间:2019-06-14

本文共 1417 字,大约阅读时间需要 4 分钟。

Description

小松鼠开心地在树之间跳跃着,突然她停了下来。因为眼前出现了一个 拿着专克超萌小松鼠的法宝————超萌游戏机的游客!  超萌游戏机之所以拥有这个名字,是因为它的屏幕是一个n × 2的矩形。 小松鼠接过游戏机,开始了她的第一个游戏:俄罗斯方块。  考虑到小松鼠的智商,游戏机里的方块只有下面四种,方块按顺序下落,

o_2.jpg

可以在任意时刻(甚至是下落前)对其进行不限次数的旋转操作。

由于四种方块最小宽度都为2,因此下落的时候在水平方向上是不能够移 动的。我们称当前方块下落的过程完成了,当且仅当其再往下移动一个单 位就会与之前覆盖的方块有部分相重叠。小松鼠想要知道,在这个n×2的 游戏界面中,一共会出现多少种游戏状态。游戏状态指单次方块下落的过 程完成后,不要求游戏结束(即不要求第1行非空),且界面中出现的必须 是完整的方块。

两种游戏状态被认为是相同的,当且仅当游戏界面中的每一个格子两种 状态下被覆盖的方块类型都相同(或都不被覆盖)。

如下图是两种不同的游戏状态

   o_1.jpg
再次考虑到小松鼠的智商,答案模109 + 7 输出。

Input

一行一个数n,表示游戏界面的长度。

Output

一个数,表示游戏界面的状态数在模109 + 7意义下的值。

Constraints

对于前10%,\(n <= 10。\)

对于前30%,\(n <= 1000。\)
对于前60%,\(n <= 100000。\)
对于100%, \(n <= 1000000。\)

Soluiton

大模拟递推

定义数组dp[N][6]

题目只有两列,所以所有的方块只有6种情况

dp[i][0~6]分别表示在第i种情况的方块落下后,第i行的方案数

结合代码理解一下很简单的

Code

#include
#define il inline#define rg register#define lol long long#define Min(a,b) (a)<(b)?(a):(b)#define Max(a,b) (a)>(b)?(a):(b)using namespace std;const int N=1e6+10;const int inf=2e9;lol ans;int n;lol dp[N][6];//0.左中 1.右中 2.上下 3.块 4.反L 5.倒Lconst int mod=1e9+7;void in(int &ans){ ans=0; int f=1; char i=getchar(); while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();} while(i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+i-'0', i=getchar(); ans*=f;}int main(){ freopen("StopAllSounds.in","r",stdin); freopen("StopAllSounds.out","w",stdout); in(n); if(n==1) { cout<<1<

博主蒟蒻,随意转载.但必须附上原文链接

转载于:https://www.cnblogs.com/real-l/p/9609496.html

你可能感兴趣的文章
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
Ubuntu下面安装eclipse for c++
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>