hihocoder1114 小Hi小Ho的惊天大作战:扫雷·一

2024-09-09 07:32

本文主要是介绍hihocoder1114 小Hi小Ho的惊天大作战:扫雷·一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1114 : 小Hi小Ho的惊天大作战:扫雷·一
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
故事背景:密室、监视器与充满危机的广场

“我们还是循序渐进,先来考虑这样一个简单化问题:”小Hi思索片刻,道:“在一个大小为2*N的广场,其中第一行里的某一些格子里可能会有至多一个地雷,而第二行的格子里全都为数字,表示第一行中距离与这个格子不超过2的格子里总共有多少个地雷,即第二行的第i个格子里的数字表示第一行的第i-1个, 第i个, 第i+1个,三个格子(如果i=1或者N则不一定有三个)里的地雷的总数。”

“而我们要做的是——找出哪些地方一定是雷,哪些地方一定不是雷。”小Ho道:“不然,我可就要光荣牺牲了。”

提示:寻找关键点——那些一旦决定之后就能让局面豁然开朗的地方。

输入

每个测试点(输入文件)存在多组测试数据。

每个测试点的第一行为一个整数Task,表示测试数据的组数。

在一组测试数据中:

第1行为1个整数N,表示迷宫的宽度。

第2行为N个整数A_1 … A_N,依次表示迷宫第二行的N个格子里标注的数字。

对于100%的数据,满足1<=N<=10^5, 0<=a_i<=3.<>

对于100%的数据,满足符合数据描述的地图一定存在。

输出

对于每组测试数据,输出2行,其中第一行先输出一定为地雷的格子的数量,然后按照从小到大的顺序输出所有一定为地雷的格子的位置,第二行先输出一定不为地雷的格子的数量,按照从小到大的顺序输出所有一定不为地雷的格子的位置。

样例输入
2
3
1 1 1
10
1 2 1 2 2 3 2 2 2 2
样例输出
1 2
2 1 3
7 1 3 5 6 7 9 10
3 2 4 8

import java.io.BufferedInputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;public class Main {public static void main(String[] args) {new Task().solve();}}class Task {int[] table, answer;int n;void solve() {Scanner cin = new Scanner(new BufferedInputStream(System.in));PrintWriter cout = new PrintWriter(System.out);int t = cin.nextInt();while (t-- > 0) {n = cin.nextInt();table = new int[n + 2];answer = new int[n + 2];for (int i = 1; i <= n; i++)table[i] = cin.nextInt();int[][] state = new int[2][n + 1];Arrays.fill(state[0], 0);Arrays.fill(state[1], 0);boolean[] yes = new boolean[2];yes[0] = yes[1] = false;for (int i = 0; i <= 1; i++) {if (test(i)) {yes[i] = true;System.arraycopy(answer, 1, state[i], 1, n);}}List<Integer>[] res = new List[2];res[0] = new ArrayList<Integer>();res[1] = new ArrayList<Integer>();if (yes[0] && yes[1]) {for (int i = 1; i <= n; i++) {if (state[0][i] == 1 && state[1][i] == 1)res[1].add(i);if (state[0][i] == 0 && state[1][i] == 0)res[0].add(i);}} else {int k = -1;if (yes[0])k = 0;if (yes[1])k = 1;for (int i = 1; i <= n; i++) {if (state[k][i] > 0)res[1].add(i);if (state[k][i] == 0)res[0].add(i);}}for (int i = 1; i >= 0; i--) {cout.print(res[i].size());for (int j : res[i]) {cout.print(" " + j);}cout.println();}}cout.flush();}boolean test(int start) {answer[1] = start;answer[0] = answer[n + 1] = 0;for (int i = 2; i <= n; i++) {answer[i] = table[i - 1] - answer[i - 2] - answer[i - 1];}for (int i = 1; i <= n; i++) {if (answer[i] < 0 || answer[i] > 1)return false;if ((answer[i - 1] + answer[i] + answer[i + 1]) != table[i])return false;}return true;}}

这篇关于hihocoder1114 小Hi小Ho的惊天大作战:扫雷·一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150537

相关文章

球球大作战

代码:  #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdbool.h>#include<graphics.h>#include<stdlib.h>#include<conio.h>#include<time.h>//随机数库文件#include<math.h>#include<tchar.h>/*注重的是

hi 平台 opencv4.8 交叉编译

echo "参数是 'arm_hi'"         current_path=$(pwd)         nproc=32         # arm-linux-gnueabihf-gcc, Cross-Toolchain PATH         export PATH="/opt/aarch64-v01c01-linux-musl-gcc/bin:$PATH"

扫雷(下)

扫雷游戏的代码完整版放在这里啦 分为三个部分,game.h , game.c ,还有main.c 其中game.c是进行函数实现的功能,main.c是主要的流程 game.h #pragma once#include <stdio.h>#include <time.h>#define ROW 9#define COL 9#define ROWS ROW+2#define CO

扫雷游戏(上)

开学快乐 今天我们来写扫雷的代码 一、了解扫雷是怎么玩儿的 首先这里放一个扫雷游戏的链接扫雷游戏网页版 - Minesweeper 然后我们点进去耍了一阵,发现扫雷首先要有一个棋盘,然后在玩家不知道的情况下设置雷在不同的格子,玩家点到雷就炸死了,如果没点到雷,那么点到的格子要显示周围一圈雷的个数 这是扫雷最基本的玩儿法,我们先来实现它 二、扫雷代码初步完成 1.游戏菜单 毕竟扫

dfs 解决 部分矩阵洪流/floodfill算法题(水流问题、扫雷游戏、衣橱整理、C++)

文章目录 前言1. 什么是FloodFill问题2. 用什么方法解决FloodFill问题 算法题417.太平洋大西洋水流问题529.扫雷游戏LCR130.衣橱整理 前言 1. 什么是FloodFill问题 一般floodfill问题可以描述为:给定一个二维矩阵,其中每个元素代表一个像素点,并给定一个起始点、目标颜色和填充颜色。问题要求将以起始点为中心,与其相邻且具有相同颜色

[创业之路-145] :做项目做产品,50米/100米短跑与马拉松长跑,跑法不同,几人的小分队作战与兵团战役,打法不同

目录 一、做项目做产品类同于跑步,50米/100米短跑与马拉松长跑,跑法不同 1. 50米/100米短跑与项目/产品短周期开发的类比 2. 马拉松长跑与长期项目/产品开发的类比 3. 跑法不同的核心差异 二、做项目做产品类同于打仗,几人的小分队作战与兵团战役,打法不同 1. 规模与复杂度 2. 战略与战术 3. 沟通与协作 4. 领导力与执行力 5. 风险评估与应对 一、

Linux性能调优大作战:从零到英雄,手把手教你打造极速系统!让你的服务器快如闪电!

第一章 引言 Linux系统性能调优在信息技术领域具有不可忽视的重要性。随着Linux操作系统的广泛应用,从桌面环境到大型服务器集群,其性能优化变得尤为关键。调优不仅可以提升系统的响应速度和吞吐量,还能降低资源消耗,从而延长硬件使用寿命,减少总体拥有成本。本文研究旨在深入探讨Linux系统性能调优的技巧,以期为系统管理员、开发者和研究人员提供实用的参考指南。 在当前的技术背景下,Linux系统

SQLite Insert 语句:一场数据“移民”大作战

SQLite Insert 语句:一场数据“移民”大作战 嘿,各位数据库的“移民官”们!今天咱们来聊聊SQLite里的一场有趣活动——Insert语句,也就是数据“移民”。没错,就像国家与国家之间有移民,我们的数据也可以在SQLite数据库的各个表之间“移民”。 一、Insert语句的“移民签证” 在SQLite这个“国家”里,想要让数据“移民”到另一个表,你需要给它们办理一张“移民签证”,

手把手带你实现C语言扫雷进阶(1)(接上回基础版扫雷,附上源码)

文章目录 一、扫雷进阶留下的问题二.非雷扩展周围不是雷函数三、标记雷函数四.查看排雷总时间五、扫雷进阶源码及总结 一、扫雷进阶留下的问题 我们先来看看之前讲扫雷基础的时候留下的一些问题: 是否可以选择游戏难度     ◦ 简单 9 * 9 棋盘,10个雷     ◦ 中等 16 * 16棋盘,40个雷     ◦ 困难 30 * 16棋盘,99个雷 如果排查位置不是雷,周围

赛场上,教练作战计划迅速Get!编码时,巨量复杂代码轻松掌握!

🎁👉点击进入文心快码 Baidu Comate 官网,体验智能编码之旅,还有超多福利!🎁 赛场上,教练作战计划迅速Get!编码时,巨量复杂代码轻松掌握!与文心快码一起为再次夺冠蓄力! 赛场上,教练作战计划迅速Get!编码时,巨量复杂代码轻松掌握 在赛场上,教练以敏锐的洞察力,超强的理解力,迅速制定作战计划。同样,在编程的浩瀚宇宙里,面对巨量而复杂的代码海洋,文心