NC53683 「火」皇家烈焰

「火」皇家烈焰

http://www.nowcoder.com/questionTerminal/64d45564c38d40f5a46b6ba0313e58df

题目:
帕秋莉掌握了一种火属性魔法
由于钟爱扫雷游戏,帕秋莉把自己图书馆前的走廊看作一个一维的扫雷地图,她制造了很多烈焰,排在这条走廊内
现在帕秋莉告诉你一部分烈焰的分布情况,请你告诉她可能的情况有多少种
对于一个格子,里面会有以下几种字符:
0:这个格子没有烈焰,且其左右两个格子均没有烈焰
1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰
2:这个格子没有烈焰,且其左右两个格子中均有烈焰
*:这个格子有烈焰
?:未告诉你本格情况

思路:动态规划,状态受前一个、当前、后一个影响,故用三维数组f[i][0/1][0/1],i表示前i个,第二维表示当前位置是否有烈焰,第三维表示后一位是否有烈焰。

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define ll long long
const ll mod=1e9+7;
ll f[1000005][2][2];
char str[1000005];
int main()
{
    scanf("%s",str+1);
    str[0]='@';
    int len=strlen(str)-1;
    f[0][0][0]=f[0][0][1]=1;
    for(int i=1;i<=len;i++)
    {
        if(str[i]=='0')
        {
            f[i][0][0]=f[i-1][0][0];
        }
        else if(str[i]=='1')
        {
            f[i][0][0]=f[i-1][1][0];
            f[i][0][1]=f[i-1][0][0];
        }
        else if(str[i]=='2')
        {
            f[i][0][1]=f[i-1][1][0];
        }
        else if(str[i]=='*')
        {
            f[i][1][0]=f[i][1][1]=(f[i-1][0][1]+f[i-1][1][1])%mod;
        }
        else if(str[i]=='?')
        {
            f[i][0][0]=f[i][0][1]=(f[i-1][0][0]+f[i-1][1][0])%mod;
            f[i][1][0]=f[i][1][1]=(f[i-1][0][1]+f[i-1][1][1])%mod;
        }
    }
    cout << (f[len][0][0]+f[len][1][0])%mod;
    return 0;
}
全部评论

相关推荐

10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务