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