HDU 5965 扫雷(递推)
2016-11-10 11:06
381 查看
如有错误,欢迎大神指出!!!!!
Total Submission(s): 818 Accepted Submission(s): 204
[align=left]Problem Description[/align]
扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔。
该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷。 游戏中,格子可能处于己知和未知的状态。如果一个己知的格子中没有地雷,那么该 格子上会写有一个一位数,表示与这个格子八连通相邻的格子中地雷总的数量。
现在,晨晨和小璐在一个3行N列(均从1开始用连续正整数编号)的矩阵中进 行游戏,在这个矩阵中,第2行的格子全部是己知的,并且其中均没有地雷;而另外 两行中是未知的,并且其中的地雷总数量也是未知的。
晨晨和小璐想知道,第1行和第3行有多少种合法的埋放地雷的方案。
[align=left]Input[/align]
包含多组测试数据,第一行一个正整数T,表示数据组数。
每组数据由一行仅由数字组成的长度为N的非空字符串组成,表示矩阵有3行N 列,字符串的第i个数字字符表示矩阵中第2行第i个格子中的数字。
保证字符串长度N <= 10000,数据组数<= 100。
[align=left]Output[/align]
每行仅一个数字,表示安放地雷的方案数mod100,000,007的结果。
[align=left]Sample Input[/align]
2
22
000
[align=left]Sample Output[/align]
6
1
[align=left]Source[/align]
2016年中国大学生程序设计竞赛(合肥)-重现赛(感谢安徽大学)
题意:中文题目不解释了
题解:一道dp题目,确定了第一列放的雷的个数,0到2,然后遍历一遍。(解释的不好,直接看代码)
ac code:
扫雷
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 818 Accepted Submission(s): 204
[align=left]Problem Description[/align]
扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔。
该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷。 游戏中,格子可能处于己知和未知的状态。如果一个己知的格子中没有地雷,那么该 格子上会写有一个一位数,表示与这个格子八连通相邻的格子中地雷总的数量。
现在,晨晨和小璐在一个3行N列(均从1开始用连续正整数编号)的矩阵中进 行游戏,在这个矩阵中,第2行的格子全部是己知的,并且其中均没有地雷;而另外 两行中是未知的,并且其中的地雷总数量也是未知的。
晨晨和小璐想知道,第1行和第3行有多少种合法的埋放地雷的方案。
[align=left]Input[/align]
包含多组测试数据,第一行一个正整数T,表示数据组数。
每组数据由一行仅由数字组成的长度为N的非空字符串组成,表示矩阵有3行N 列,字符串的第i个数字字符表示矩阵中第2行第i个格子中的数字。
保证字符串长度N <= 10000,数据组数<= 100。
[align=left]Output[/align]
每行仅一个数字,表示安放地雷的方案数mod100,000,007的结果。
[align=left]Sample Input[/align]
2
22
000
[align=left]Sample Output[/align]
6
1
[align=left]Source[/align]
2016年中国大学生程序设计竞赛(合肥)-重现赛(感谢安徽大学)
题意:中文题目不解释了
题解:一道dp题目,确定了第一列放的雷的个数,0到2,然后遍历一遍。(解释的不好,直接看代码)
ac code:
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cstdlib> #include <cmath> #include <vector> #include <list> #include <deque> #include <queue> #include <iterator> #include <stack> #include <map> #include <set> #include <algorithm> #include <cctype> using namespace std; #define si1(a) scanf("%d",&a) #define si2(a,b) scanf("%d%d",&a,&b) #define sd1(a) scanf("%lf",&a) #define sd2(a,b) scanf("%lf%lf",&a,&b) #define ss1(s) scanf("%s",s) #define pi1(a) printf("%d\n",a) #define pi2(a,b) printf("%d %d\n",a,b) #define mset(a,b) memset(a,b,sizeof(a)) #define forb(i,a,b) for(int i=a;i<b;i++) #define ford(i,a,b) for(int i=a;i<=b;i++) typedef long long LL; const int N=1100001; const int M=6666666; const int INF=0x3f3f3f3f; const double PI=acos(-1.0); const double eps=1e-7; const LL mod=1e8+7; char op[10005]; int have[10005],num[10005]; int main() { int T; scanf("%d",&T); while(T--) { scanf("%s",op); int len=strlen(op); LL ans=0; for(int i=0;i<=2;i++) { have[0]=i; num[0]=i; LL res=(i==1?2:1);//需要特判 bool flag=true; for(int j=1;j<len;j++) { int now=op[j-1]-'0'-have[j-1];//now为第i列所需要放的雷数 num[j]=now;//num[i]表示第i列放的雷数 have[j]=now+num[j-1];//have[i]表示第i列和i-1列所放的雷数 if(now==1) res=res*2%mod; if(now>2||now<0||(have[j-1]+now!=op[j-1]-'0')) { flag=false; break; } } if(have[len-1]!=op[len-1]-'0')flag=false; if(flag) ans=(ans+res)%mod; } cout<<ans<<endl; } return 0; }
相关文章推荐
- hdu 5965 扫雷(递推)
- HDU 5965 扫雷 递推
- HDU 5965 扫雷 (递推+枚举)
- HDU 5965 扫雷(递推+枚举)
- hdu 5965 扫雷(递推)
- hdu 5965 扫雷 分析递推
- HDU 5965 扫雷(递推)
- hdu_5965_扫雷(递推)
- HDU --- 5965 扫雷 【dp + 思维】
- hdu 5965 扫雷
- 扫雷 HDU - 5965
- hdu 5965(dp递推,简单题)
- hdu 5965 (扫雷)
- HDU 5965 扫雷
- HDU 5965 扫雷 CCPC合肥
- Hdu 5965 扫雷【思维+Dp】
- 2016ccpc 合肥站hdu 5965 扫雷
- hdu 5965 扫雷 ccpc 2016 合肥站
- HDU 5965 扫雷
- HDU 5965 扫雷 (递推+模拟姿势)