Codeforces 404D Minesweeper 1D
2024-08-30 20:24:01
题意:
给定字符串,其中’*’表示地雷,’1’表示左/右边有一个地雷相邻,’2’表示左右两边均有地雷相邻,’0’表示左右均无地雷相邻,’?’表示待定,可填入0,1,2或者地雷,有多少种表示方法使字母串满足规定。
分析:
不难想到用dp[i][j]其中j为0,1,2,3(即四种状态),表示下标为i的元素为j状态时,前i+1个字符满足规定的种数。起初这样做,每次都还需要对前一个元素为’1’时进行特殊处理,要分两种情况,不如直接在dp数组中增加一个状态,表示起来也更清晰,即dp[i][j]中j可为0,1,2,3,4,其中0表示字符串下标为i的元素为0,1表示元素为1且前一个元素为地雷,2表示元素为1且前一个元素非地雷(0/1),3表示元素为地雷,4表示元素为’2’。
代码:
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 1e6 + 5;
long long mod = 1000000007;
long long dp[maxn][5];
int main (void)
{
string a;cin>>a;
memset(dp,0,sizeof(dp));
if(a[0]=='0') dp[0][0] = 1;
else if(a[0] =='1') dp[0][2] = 1;
else if(a[0] =='*') dp[0][3] = 1;
else if(a[0]=='?') {
dp[0][0] = 1;
dp[0][3] = 1;
dp[0][2] = 1;
}
for(int i = 1; i < a.length();i++){
if(a[i]=='0') {
dp[i][0] = (dp[i-1][1] + dp[i-1][0])%mod;
}else if(a[i] == '1'){
dp[i][1] = dp[i-1][3]%mod;
dp[i][2] = (dp[i-1][1]+dp[i-1][0])%mod;
}else if(a[i] == '*'){
dp[i][3] = (dp[i-1][4]+dp[i-1][2]+dp[i-1][3])%mod;
}else if(a[i] =='?'){
dp[i][0] = (dp[i-1][1] + dp[i-1][0])%mod;
dp[i][1] = dp[i-1][3]%mod;
dp[i][2] = (dp[i-1][1]+dp[i-1][0])%mod;
dp[i][3] = (dp[i-1][2]+dp[i-1][4]+dp[i-1][3])%mod;
dp[i][4] = dp[i-1][3]%mod;
}else if(a[i] == '2'){
dp[i][4] = dp[i-1][3]%mod;
}
// for(int j= 0; j < 5; j++) cout<<dp[i][j]<<' ';
//cout<<endl;
}
int len = a.length()-1;
long long tot=(dp[len][0]+dp[len][1]+dp[len][3])%mod;
cout<<tot<<endl;
}
最新文章
- Schema
- URL地址中使用中文作为的参数【转】
- Jmeter性能测试入门(转)
- nginx基于IP的虚拟主机
- JMeter学习-007-JMeter 断言实例之一 - 响应断言
- DXUT初步理解
- SSH_框架整合5--验证用户名是否可用
- JS中基本类型与包装类型的关系
- C#MongoDB 分页查询的方法及性能
- Bootstrap轮播获取当前活动的焦点对象
- C# gridview分頁導出excel
- 「Poetize3」导弹防御塔
- openldap---ldapsearch使用
- 用apiCloud开发应用
- 原生js
- Hibernate(二):MySQL server version for the right syntax to use near &#39;type=InnoDB&#39; at line x
- Android的oom详解
- IS创新之路 -- 都昌公司赋能型HIT企业发展之路
- python跨网段遍历枚举IP地址(转)
- Elasticsearch 学习之子聚集过滤
热门文章
- iOS捷径(Workflow 2.0)拓展
- T4869 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB
- flex弹性布局操练2
- org.apache.tomcat.util.net.NioEndpoint,打开的文件过多
- Farseer.net轻量级ORM开源框架说明及链接索引
- IE盒模型和标准w3c盒模型
- flex布局(主要分清楚容器和条目)
- Matlab中size、numel、length、fix函数的使用
- Harris角点检测原理详解
- jQuery 开始动画,停止动画