扫雷

来源:互联网 发布:lstm nlp tensorflow 编辑:程序博客网 时间:2024/06/10 02:51
扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔。 
该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷。 游戏中,格子可能处于己知和未知的状态。如果一个己知的格子中没有地雷,那么该 格子上会写有一个一位数,表示与这个格子八连通相邻的格子中地雷总的数量。 
现在,晨晨和小璐在一个3行N列(均从1开始用连续正整数编号)的矩阵中进 行游戏,在这个矩阵中,第2行的格子全部是己知的,并且其中均没有地雷;而另外 两行中是未知的,并且其中的地雷总数量也是未知的。 
晨晨和小璐想知道,第1行和第3行有多少种合法的埋放地雷的方案。
Input
包含多组测试数据,第一行一个正整数T,表示数据组数。 
每组数据由一行仅由数字组成的长度为N的非空字符串组成,表示矩阵有3行N 列,字符串的第i个数字字符表示矩阵中第2行第i个格子中的数字。 
保证字符串长度N <= 10000,数据组数<= 100。 
Output
每行仅一个数字,表示安放地雷的方案数mod100,000,007的结果。
Sample Input
222000
Sample Output
6

1

由第一列确定后面的情况。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;char a[10001];int b[10001];const int mod=100000007;int main(){    int n,t,i,j;    scanf("%d",&t);    while(t--)    {        scanf("%s",a);        int len=strlen(a);        for(i=0; i<len; i++)        {            b[i+1]=a[i]-'0';        }        int ans=0;        for(i=0; i<=2; i++)        {            int p=1;//倍数            if(i==1)//第一排雷数为一时,倍数为2;            {                p=2;            }            int d=b[1]-i;//后一排的雷数            int t=i;//前一排的雷数            for(j=2; j<=len; j++)            {                if(d<0||d>2)//不符合要求                    break;                if(d==1)//后一排                {                    p=(p*2)%mod;                }                int tt=t;                t=d;//                d=b[j]-d-tt;//后一排的雷个数            }            if(j==len+1&&d==0)//符合要求                ans=(ans+p)%mod;        }        printf("%d\n",ans);    }    return 0;}



原创粉丝点击