hihoCoder#1114 小Hi小Ho的惊天大作战:扫雷·一
回溯+搜索
枚举每个位置上能否放地雷,当第i个位置枚举完成后,第i-1个位置的情况就确定了,此时,检查第i-1个位置是否满足要求,即左右间隔为1的范围内地雷数是否等于申明数字,如果满足条件,那么继续搜索下去,如果不满足条件,抛弃这个搜索分支。
搜索完成后,将所有可行解按位置“与”一下 ,找到那些一定为地雷或一定为空的格子。
最后输出即可。
代码:
#include <iostream>
#include <cstring> using namespace std; void merge(int *t, int *r, int n) {
for (int i = ; i < n; i++) {
if (t[i] == - || t[i] == r[i])
t[i] = r[i];
else
t[i] = -;
}
} void find(int *a, int *r, int *t, int p, int n) {
if (p >= n) {
if ((n == && a[p - ] == r[p - ])
|| ((n > ) && a[p - ] == r[p - ] + r[p - ]))
merge(t, r, n);
}
else if (p == ) {
for (int i = ; i < ; i++) {
r[p] = i;
find(a, r, t, p + , n);
}
}
else if (p == ) {
for (int i = ; i < ; i++) {
r[p] = i;
if (a[p - ] == r[p - ] + r[p])
find(a, r, t, p + , n);
}
}
else {
for (int i = ; i < ; i++) {
r[p] = i;
if (a[p - ] == r[p] + r[p - ] + r[p - ])
find(a, r, t, p + , n);
}
}
} int main() {
int n; cin >> n;
while (n--) {
int N;
cin >> N;
int *a = new int[N];
int *r = new int[N];
int *t = new int[N]; for (int i = ; i < N; i++)
cin >> a[i];
memset(r, , N * sizeof(int));
memset(t, -, N * sizeof(int)); find(a, r, t, , N); int mine = ;
int not_mine = ; for (int i = ; i < N; i++) {
mine += (t[i] == ? : );
not_mine += (t[i] == ? : );
} cout << mine;
for (int i = ; i < N; i++)
if (t[i] == )
cout << " " << i + ;
cout << endl; cout << not_mine;
for (int i = ; i < N; i++)
if (t[i] == )
cout << " " << i + ;
cout << endl; delete t;
delete r;
delete a;
} return ;
}
hihoCoder#1114 小Hi小Ho的惊天大作战:扫雷·一的更多相关文章
- hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一 最详细的解题报告
题目来源:小Hi小Ho的惊天大作战:扫雷·一 解题思路:因为只要确定了第一个是否有地雷就可以推算出后面是否有地雷(要么为0,要么为1,如果不是这两个值就说明这个方案行不通),如果两种可能中有一种成功, ...
- hiho #1114 : 小Hi小Ho的惊天大作战:扫雷·一
#1114 : 小Hi小Ho的惊天大作战:扫雷·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 故事背景:密室.监视器与充满危机的广场 “我们还是循序渐进,先来考虑这 ...
- hihoCoder#1120 小Hi小Ho的惊天大作战:扫雷·三
原题地址 看上去非常复杂, 实际上是这一系列最简单的一步,本质上是个搜索过程,相比于前一道题,可以不用策略三,而且题目的数据规模超级小,所以暴力搜索就能过. 把尚未确定的点放在一个unsettled列 ...
- hihoCoder#1119 小Hi小Ho的惊天大作战:扫雷·二
原题地址 没有复杂算法,就是麻烦,写起来细节比较多,比较考验细心,一次AC好开心. 代码: #include <iostream> #include <vector> #inc ...
- 【转】HTML5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...
- html5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于< ...
- 微信小程序即将开放申请?微信小论坛小程序专场16日或可见分晓
9月22号微信小程序内测至今已经好一段时间了,首批只开放了200个名额,没拿到内测资格的朋友早就等到心急了.就在刚刚,微信公开课宣布微信小论坛小程序专场即将在11月16号举行,微信公众平台小程序会在当 ...
- 如何获取微信小店小程序的AppID
2017年11月16日,微信有一个重磅的宣布:为了帮商家在微信内快速开店,方便商家和用户之间沟通,所有认证公众号,可快速创建微信小店小程序.这个改变是否能给微信小店带来新的生机?还需要时间的考验.微信 ...
- 微信小游戏 小程序与小游戏获取用户信息接口调整 wx.createUserInfoButton
参考: 小程序•小故事(6)——微信登录能力优化 小程序•小故事(4)——获取用户信息 本篇主要是讲微信getUserInfo接口不再出现授权弹框 那么原来getUserInfo是怎么样?修改之后又是 ...
随机推荐
- 解题报告:hdu 2073 无限的路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2073 Problem Description 甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接 ...
- go环境搭建及vscode中调试
1.下载go安装包一般国内用户无法在官网下载,可以自行百度找一些共享的资源墙内下载地址: http://www.golangtc.com/downloadCSDN上资源下载(一般需要积分):http: ...
- 【学习笔记】SIFT尺度不变特征 (配合UCF-CRCV课程视频)
SIFT尺度不变特征 D. Lowe. Distinctive image features from scale-invariant key points, IJCV 2004 -Lecture 0 ...
- AJPFX编写cmd界面下一键编译、执行java代码的bat脚本
此脚本适合刚接触java的同学,在cmd界面下用jc取代 复杂的 javac *.java + java main使用说明:把脚本内容复制到txt文本中,修改后缀名为.bat,运行一次即可完成配置, ...
- json三层解析(数组解析)
里面多了数组,所以用到了JOSNArray package com.xykj.weather; import java.io.BufferedReader; import java.io.IOExce ...
- SQL Server xtype的介绍
sysobjects 表 在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中占一行.只有在 tempdb 内,每个临时对象才在该表中占一行. 列名 数据类型 描述 name sys ...
- OneinStack 安装 LNMP 切换PHP版本
如果你的环境不是OneinStack安装的 ,可以略过这条博客了 注意:以下所有命令若提示权限不足 请在命令前加 sudo *** ①,首先查看当前已安装的PHP版本,我这里安装了好几个版本,你们可 ...
- Myeclipse快速排版的快捷键
Myeclipse快速排版的快捷键 1.全选 ctrl+a 2.排版 ctrl+i
- 2D热力图实例
<div style="height: 100px; width: 200px" id="heatmap"></div> <scr ...
- Android自动化测试之Monkey
本来是做Web后端的,来公司实习变成微信小程序前端了,到这周变成Android APP测试人员了,也是微醺啊. 由于对手工测试终究是有些抵触,所有昨天小试了一下不用写代码的自动化压力测试,在此记下我的 ...