【BZOJ 1088 扫雷Mine】模拟
http://www.lydsy.com/JudgeOnline/problem.php?id=1088
2*N的扫雷棋盘,第二列的值a[i]记录第 i 个格子和它8连通的格子里面雷的数目。
第一列的雷可能有多种方案满足第二列的数的限制,根据第二列的信息确定第一列雷有多少种摆放方案。
设第一列的值为b[i],不难得出以下递推关系
b[0] + b[1] = a[0]
b[0] + b[1] + b[2] = a[1]
...
b[i] = a[i-1] - a[i-2] + b[i-3]
或 b[i] = a[i-1] - b[i-1] - b[i-2]
由此发现,b[0]、b[1]确定了,后续的b[i]也由递推式唯一的确定了。而又有b[0]+b[1] = a[0]的限制条件,故可根据a[0]的值枚举b[0], b[1]的组合,然后顺次求出b[i], 判断每个b[i]值是否合法,一旦发现不合法,则此种枚举情况不成立。
程序流程图如下(这里的“合法”判断与具体位置有关,如a[0], a[n-1] <3, a[n-1] == b[n-1] + b[n-2]):

代码如下(为了直观表达流程图,用了goto语句):
#include <cstdio>
using namespace std; int n;
int a[];
int b[]; int main()
{
scanf("%d", &n);
for(int i=; i<n; i++){
scanf("%d", &a[i]);
}
int cnt = ; for(int i=; i<n; i++){ //非法
if(a[i]< || a[i]>){
goto L;
}
}
if(a[n-]== || a[] == ){ //非法
goto L;
} if(a[] == ) b[] = b[] = ;
else if(a[] == ) b[] = b[] = ; if(a[] == ) goto B; b[] = a[] - a[]; //0或2的情况
if(b[] < || b[] > ){
goto L;
}
for(int i=; i<n; i++){
b[i] = a[i-] - a[i-] + b[i-];
if(b[i] < || b[i] > ){
goto L;
}
}
if(b[n-] + b[n-] != a[n-]) //检查最后一个a
goto L;
printf("1\n");
return ; B: b[] = ; b[] = ; //01或10的情况
b[] = a[] - a[];
if(b[] < || b[] > ){
goto L1;
}
for(int i=; i<n; i++){
b[i] = a[i-] - a[i-] + b[i-];
if(b[i] < || b[i] > ){
goto L1;
}
}
if(b[n-] + b[n-] != a[n-])
goto L1;
cnt++; L1: b[] = ; b[] = ; //试探另一种
b[] = a[] - a[];
if(b[] < || b[] > ){
goto L;
}
for(int i=; i<n; i++){
b[i] = a[i-] - a[i-] + b[i-];
if(b[i] < || b[i] > ){
goto L;
}
}
if(b[n-] + b[n-] != a[n-])
goto L;
cnt++; L: printf("%d\n", cnt);
return ; }
BZOJ 1088
【BZOJ 1088 扫雷Mine】模拟的更多相关文章
- BZOJ 1088 扫雷Mine
今天做了几道BZOJ的题,发现统观题目时还是很多很多都不会的,不过还是有几道时可以作的,以后要慢慢加强,争取多做题 BZOJ 1088 扫雷 其实本人平常不大玩扫雷的,就算玩也不是很好,不过看n*2的 ...
- BZOJ 1088 扫雷Mine 枚举初始状态
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1088 题目大意: 现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: ...
- BZOJ 1088 扫雷Mine (递推)
题解:如果确定了第一排前两个数,那么剩下的数是唯一确定的,所以只要分情况讨论即可. #include <cstdio> #include <cstring> int n,a[1 ...
- BZOJ 1088: [SCOI2005]扫雷Mine【思维题,神奇的模拟+枚举】
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3791 Solved: 2234[Submit][St ...
- Bzoj 1088: [SCOI2005]扫雷Mine (DP)
Bzoj 1088: [SCOI2005]扫雷Mine 怒写一发,算不上DP的游戏题 知道了前\(i-1\)项,第\(i\)项会被第二列的第\(i-1\)得知 设\(f[i]\)为第一列的第\(i\) ...
- 【递推】BZOJ 1088: [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2275 Solved: 1328[Submit][St ...
- 【BZOJ】1088: [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Description 相 信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”人国流行起了一种简单的 ...
- bzoj 1088: [SCOI2005]扫雷Mine
题目链接 1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2525 Solved: 1495[Submi ...
- 1088: [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1635 Solved: 979[Submit][Sta ...
随机推荐
- 年度钜献,108个大数据文档PDF开放下载
1.大数据的开放式创新——吴甘沙 相关阅读:[PPT]吴甘沙:让不同领域的数据真正流动.融合起来,才能释放大数据的价值 下载:大数据的开放式创新——吴甘沙.pdf 2.微软严治庆——让大数据为每个人服 ...
- 产生n bit所有可能的序列
void binary(int n) { ) printf("%s\n",A); // Assume A is a global variable else { A[n-] = ' ...
- SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确解决方法
问题:[SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确.参数 1 (""): ...
- Impala 5、Impala 性能优化
• 执行计划 – 查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案 – 命令:explain sql.profile 要点: • 1.SQL优化,使用之前调用执行计划 • ...
- poj1426 Find The Multiple
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14622 Accepted: 593 ...
- Tomcat可以在eclipse里启动,可是不能訪问首页的问题
今天在使用eclipse的时候发现一个问题.就是我在eclipse里面已经启动了tomcat.部署上去的项目也能够启动,可是就是没法訪问tomcat的首页.port等等都没有问题. 后来查到解决方式, ...
- linux 在批处理中,完整路径有空格的处理方式(加引號)
cp -f E:/XML_EDITOR/xmleditor25/xmleditor/Editor_UIOuterCtrl/TraceViewDlg.cpp E:/XML_EDITOR/'XMLEdit ...
- thinkphp的条件的多种写法
class SelectAction extends Action{ function index(){ //thinkphp 查询语言 // 1.普通查询 // 2.区间查 ...
- java学习之Date的使用
Date使用,主要要注意将日期格式化,否则返回的是系统默认的格式.请自己查阅API文档. import java.util.*; import java.text.*; public class Te ...
- Jquery如何获取控件ID
l 1.#id 用法: $(”#myDiv”); 返回值 单个元素的组成的集合 说明: 这个就是直接选择html中的id=”myDiv” l 2.Element 用法: ...