码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces Minesweeper 1D

时间:2015-02-04 20:12:17      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

题意:就是挖地雷,给你一个字符串,‘*’代表地雷,‘1’代表在它的周围有1个地雷,‘2’代表在左右都有个地雷,‘?’代表不确定是不是地雷,可以是1,2,*,问你最后有几种方式确定所有的的地雷。

思路:dp[i][0] 代表次位置为0,dp[i][1]代表左边有地雷,dp[i][2]代表右边有地雷,dp[i][3]代表左右都有,dp[i][4]代表此位置为地雷。

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 1000100
 5 #define ll long long
 6 using namespace std;
 7 const int mod=1000000007;
 8 
 9 char str[maxn];
10 ll dp[maxn][5];
11 
12 int main()
13 {
14    while(scanf("%s",str)!=EOF)
15    {
16         int k=strlen(str);
17         memset(dp,0,sizeof(dp));
18         if(str[0]==0) dp[0][0]=1;
19         else if(str[0]==1) dp[0][2]=1;
20         else if(str[0]==*) dp[0][4]=1;
21         else if(str[0]==?)
22         {
23             dp[0][0]=dp[0][2]=dp[0][4]=1;
24         }
25         for(int i=1; i<k; i++)
26         {
27             if(str[i]==0)
28             {
29                dp[i][0]+=(dp[i-1][1]+dp[i-1][0]);
30                dp[i][0]%=mod;
31             }
32             else if(str[i]==1)
33             {
34                 dp[i][1]+=dp[i-1][4];
35                 dp[i][2]+=dp[i-1][0]+dp[i-1][1];
36                 dp[i][1]%=mod;
37                 dp[i][2]%=mod;
38             }
39             else if(str[i]==2)
40             {
41                 dp[i][3]+=dp[i-1][4];
42                 dp[i][3]%=mod;
43             }
44             else if(str[i]==*)
45             {
46                 dp[i][4]+=dp[i-1][2]+dp[i-1][3]+dp[i-1][4];
47                 dp[i][4]%=mod;
48             }
49             else if(str[i]==?)
50             {
51                 dp[i][0]+=dp[i-1][0]+dp[i-1][1];
52                 dp[i][0]%=mod;
53                 dp[i][1]+=dp[i-1][4];
54                 dp[i][1]%=mod;
55                 dp[i][2]+=dp[i-1][1]+dp[i-1][0];
56                 dp[i][2]%=mod;
57                 dp[i][3]+=dp[i-1][4];
58                 dp[i][3]%=mod;
59                 dp[i][4]+=dp[i-1][2]+dp[i-1][3]+dp[i-1][4];
60                 dp[i][4]%=mod;
61             }
62         }
63         ll ans=dp[k-1][0]+dp[k-1][1]+dp[k-1][4];
64         ans%=mod;
65         printf("%lld\n",ans);
66    }
67    return 0;
68 }
View Code

 

codeforces Minesweeper 1D

标签:

原文地址:http://www.cnblogs.com/fanminghui/p/4273125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!