【每日一题】「火」皇家烈焰

「火」皇家烈焰

https://ac.nowcoder.com/acm/problem/53683

solution

一开始考虑用表示前i个位置,第个位置有(1)没有(0)烈焰,的方案数。发现不好转移。

当一种状态无法转移时,就再加一维状态

表示前i个位置,第i个位置的状态为j,第个位置状态为的方案数。

然后就可以转移了。

当第个位置的信息为时,就有

当第个位置的信息为时,就有

当第个位置的信息为时,就有

当第个位置的信息为时,就有

当第个位置的信息为时,就有

最后答案就是

code

/*
* @Author: wxyww
* @Date: 2020-05-07 16:17:44
* @Last Modified time: 2020-05-07 16:46:08
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<bitset>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
const int N = 1000010,mod = 1e9 + 7;
ll read() {
    ll x=0,f=1;char c=getchar();
    while(c<'0'||c>'9') {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9') {
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}
int f[N][2][2];
char s[N];
int main() {
    scanf("%s",s + 1);
    int n = strlen(s + 1);
    if(s[1] == '*') f[0][0][1] = 1;
    else if(s[1] == '?') f[0][0][0] = f[0][0][1] = 1;
    else f[0][0][0] = 1;

    for(int i = 1;i <= n;++i) {
        if(s[i] == '0') {
            f[i][0][0] = f[i - 1][0][0];
        }
        if(s[i] == '1') {
            f[i][0][1] = f[i - 1][0][0];
            f[i][0][0] = f[i - 1][1][0];
        }
        if(s[i] == '2') {
            f[i][0][1] = f[i - 1][1][0];
        }
        if(s[i] == '*') {
            f[i][1][0] = f[i][1][1] = (f[i - 1][0][1] + f[i - 1][1][1]) % mod;
        }
        if(s[i] == '?') {
            f[i][1][0] = f[i][1][1] = (f[i - 1][0][1] + f[i - 1][1][1]) % mod;
            f[i][0][0] = f[i][0][1] = (f[i - 1][0][0] + f[i - 1][1][0]) % mod;
        }
    }

    cout<<(f[n][0][0] + f[n][1][0]) % mod;
    // cout<<f[1][0][0];
    return 0;
}
全部评论

相关推荐

12-18 18:50
已编辑
门头沟学院 golang
牛客33637108...:重点是要事已密成,在没有进入这家公司之前,不要有任何的泄露信息,我之前跟你一样,面了一家光伏设备厂,底薪7500加上出差补贴大概有13,000左右,已经给了口头offer了,甚至要了我的在校成绩的所有信息,还向我要了三方的网签二维码,到后面还是毁约了,我干过最愚蠢的事情就是向同学透露要签三方的事,之后的失败只会让他们幸灾乐祸,这是即将结束的大学生活给我的最后一课,不要相信任何的口头三方,该面的就去面,甚至签了三方也有毁约的可能,就像我现在签了三方还在外面实习呢,春招还是要继续参加的,不能停止面试,不然到后面毁三方的时候,重新捡起的面试很麻烦的,这是我一点点小小的见解。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务