扫雷(BZOJ1088) 题解

【问题描述】

相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。

【样例输入】

2
    1 1

【样例输出】

2

【解题思路】

本题为SCOI2005的题,其实我们可以直接模拟就行了,如果对于第二列的第一个数,我们可以确定下来第一列的第一个和第二个数的情况,然后接下来的第一列的数就用第二列的这个数去减就好了,那么最终我们如果碰到了与之不相符的情况,就说明无法满足,可以证明,每种情况最多只有两种方案。

【代码实现】

 1 var a,b:array[1..10000] of 0..3;
 2     i,j,n,ans:longint;
 3 function pd:longint;
 4 var i:longint;
 5 begin
 6  for i:=2 to n-1 do
 7   begin
 8    if a[i]-b[i]-b[i-1]<0 then
 9     exit(0)
10    else
11     b[i+1]:=a[i]-b[i]-b[i-1];
12   end;
13  if b[n-1]+b[n]-a[n]<>0 then
14   exit(0);
15  exit(1);
16 end;
17 begin
18  readln(n);
19  for i:=1 to n do
20   read(a[i]);
21  case a[1] of
22   0:ans:=ans+pd;
23   1:
24    begin
25     b[1]:=1;
26     ans:=ans+pd;
27     fillchar(b,sizeof(b),0);
28     b[2]:=1;
29     ans:=ans+pd;
30    end;
31   2:
32    begin
33     b[1]:=1;
34     b[2]:=1;
35     ans:=ans+pd;
36    end;
37  end;
38  writeln(ans);
39 end.
时间: 2024-10-07 08:14:28

扫雷(BZOJ1088) 题解的相关文章

2018.10.15 练习赛 搜索专练

T1 乘积分解 题解: 预处理出\(n\)的约数,用\(F[i][j]\)记录从排序后的第i个因数出发,连续\(j\)个因数的乘积. 要求\(fFi][j]<=n\),且\(j<=k\) \(code\): #include<cstdio> #include<algorithm> #include<iostream> #include<ctype.h> #include<ctime> #define ll long long usin

【题解】 bzoj1088: [SCOI2005]扫雷Mine (神奇的做法)

bzoj1088,懒得复制,戳我戳我 Solution: 其实这个有个结论,答案只会有\(0\),\(1\),\(2\)三种(我真的是个弱鸡,这个都想不到) 然后我们假设第一个就可以推出所有的状态(显然) 没了,and 我真的菜 Code: //It is coded by Ning_Mew on 5.6 #include<bits/stdc++.h> using namespace std; const int maxn=1e4+7; int n,a[maxn]; int ans=0; in

bzoj1088[SCOI2005]扫雷

bzoj1088[SCOI2005]扫雷 题意: 有一个n×2的棋盘,第一列里面某些格子是雷,而第二列没有雷.由于第一列的雷可能有多种方案满足第二列的信息的限制,求根据第二列的信息第一列雷有多少种摆放方案. 题解: 水题,因为每个第一行的格子可以根据前一个第二行的格子里的信息唯一确定是否有雷,所以只要枚举第一个格子有没有雷就行. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #

bzoj1088:[SCOI2005]扫雷Mine

题目描述 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余"人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目.现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案. 输入 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<

[题解]扫雷Mine

// 此博文为迁移而来,写于2014年11月4日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrft.html 1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1730  Solved: 1028[Submit][Status] Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据

bzoj1088: [SCOI2005]扫雷Mine(DP)

1088: [SCOI2005]扫雷Mine 题目:传送门 题解: 一道DP(玩过扫雷的资深玩家肯定一眼秒%%%) 其实定义一个F数组表示1~i的数目就OK. 前两个格子完全可以与处理出来,后面的for一次就搞定了 水了一题... 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> 4 #include<cmath> 5 #include<algorithm> 6 #def

题解 P2327 [SCOI2005]扫雷

题解 P2327 [SCOI2005]扫雷 题目链接 普及组水题非常适合新手练搜索 看题解里各路神仙都用各种简单的方法,我来讲讲暴力搜索做法.... 对于我这样的萌新我觉得这样的做法更容易让你理解搜索 首先搜索要定义状态,我们定义dfs(x, p)是当第x位是p,就有了状态 然后我们讨论第x + 1位的情况只有两种情况,然后就有了转移 其次当x是n时,如果成立,则++ans,于是有了边界条件 最后你把这段代码复制粘贴得了100分,发现原来这有点像动态规划 #include <iostream>

BZOJ1088 [SCOI2005]扫雷Mine

Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了 ,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字 表示和它8连通的格子里面雷的数目.现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放 方案. Input 第一行为N,第二行有N个数,依次为第二列的格子中

BZOJ1088扫雷Mine 解析报告

1088: [SCOI2005]扫雷Mine Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目.现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案. Input 第一行为