CodeForces
来源:互联网 发布:sql经典语句 编辑:程序博客网 时间:2024/05/22 13:27
明显自己的思维太狭隘了,方向是没有错,想着会有炸弹在1前和炸弹在1后,居然自己就没有办法处理了,其实很简单啊,,就把这两种情况分出来就行了啊- - 真是太蠢了
dp[maxn][5],当前的状态由之前5种状态决定,分别是 0、 炸弹+1,没有炸弹+1,2,炸弹。
然后需要注意的是当前的1放下去可能会形成 炸弹+1 和没有炸弹+1,所以不要搞混。
然后就是这道题需要mod,WA了半天,最后发现数据太大了求和再mod会爆,得分开来mod。
#include <iostream>#include <iomanip>#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <algorithm>#include <set>#include <stack>#include <cmath>#define fuck() (cout << "--------------------------------" << endl)#define mod 1000000007#define INF 0x3f3f3f3fusing namespace std;const int maxn = 1000000 + 5;int dp[maxn][5];//int main(){ string x; while(cin >> x) { memset(dp,0,sizeof(dp)); unsigned long long len = x.size(); if(x[0] == '0') dp[0][0] = 1; //当前为0的状态 else if(x[0] == '1' ) dp[0][1] = 1; //当前为1,1之前不是炸弹的状态 else if(x[0] == '*' ) dp[0][4] = 1; //当前为炸弹的状态 else if(x[0] == '2') { printf("0\n"); continue; } else if(x[0] == '?') dp[0][0] = dp[0][1] = dp[0][4] = 1; // dp[0][2] 当前为1 之前是炸弹的状态 // dp[0][3] 当前为2 for(int i=1; i<len; i++) { if(x[i] == '0') dp[i][0] = (dp[i-1][0] + dp[i-1][2]) % mod; else if(x[i] == '1') { dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % mod; dp[i][2] = dp[i-1][4] % mod; } else if(x[i] == '2') dp[i][3] = dp[i-1][4] % mod; else if(x[i] == '*') dp[i][4] = ((dp[i-1][1] + dp[i-1][3]) % mod + dp[i-1][4]) % mod; else if(x[i] == '?') { dp[i][0] = (dp[i-1][0] + dp[i-1][2]) % mod; dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % mod; dp[i][2] = dp[i-1][4] % mod; dp[i][3] = dp[i-1][4] % mod; dp[i][4] = ((dp[i-1][1] + dp[i-1][3]) % mod + dp[i-1][4]) % mod; } } long long ans =( (dp[len-1][0] + dp[len-1][2]) % mod + dp[len-1][4]) % mod; printf("%lld\n",ans); }}
阅读全文
1 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- 我的学习之路_第二十三章_HTML
- MySql
- javascript中Number对象的方法和Math对象的方法
- 设计模式
- Java获取Windows7系统剪切板中的文件路径、文字、图片信息
- CodeForces
- Python异常处理和多线程
- fast rcnn 遇到valueError setting an array element with a sequence错误
- 排序算法比较
- EffectiveJava笔记(一) 创建和销毁对象
- 基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(二)
- Unprocessed Shipping Transactions Troubleshooting Techniques (文档 ID 262979.1)
- leetcode 592. Fraction Addition and Subtraction
- 贝叶斯网络--HMM