hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一 最详细的解题报告
题目来源:小Hi小Ho的惊天大作战:扫雷·一
解题思路:因为只要确定了第一个是否有地雷就可以推算出后面是否有地雷(要么为0,要么为1,如果不是这两个值就说明这个方案行不通),如果两种可能中有一种成功,只需要计算包含有多少个1和多少个0,如果两种可能都成功了,都为1的才是有雷,都为0的才是没有地雷。
具体算法(java版,可以直接AC)
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static boolean flag1 = true;//当第一个为1(有雷)时,依次推算后的结果 6 public static boolean flag2 = true;//当第一个为0(没雷)时,依次推算后的结果 7 8 public static void solve(int[] maze, int[][] mine, int N) { 9 mine[0][1] = 1;//第一个有雷 10 mine[1][1] = 0;//第一个没雷 11 12 for (int i = 2; i <= N; i++) { 13 if (flag1) { 14 mine[0][i] = maze[i - 1] - mine[0][i - 1] - mine[0][i - 2]; 15 //要么有雷,要么没雷 16 if (mine[0][i] == 1 || mine[0][i] == 0) { 17 flag1 = true; 18 } else { 19 flag1 = false;//推算失败 20 break; 21 } 22 } 23 } 24 25 for (int i = 2; i <= N; i++) { 26 if (flag2) { 27 mine[1][i] = maze[i - 1] - mine[1][i - 1] - mine[1][i - 2]; 28 if (mine[1][i] == 1 || mine[1][i] == 0) { 29 flag2 = true; 30 } else { 31 flag2 = false; 32 break; 33 } 34 } 35 } 36 if (flag1) {//验证最后一个是否正确 37 if (maze[N] != mine[0][N - 1] + mine[0][N]) { 38 flag1 = false; 39 } 40 } 41 if (flag2) { 42 if (maze[N] != mine[1][N - 1] + mine[1][N]) { 43 flag2 = false; 44 } 45 } 46 } 47 48 public static void main(String[] args) { 49 Scanner scanner = new Scanner(System.in); 50 int task = scanner.nextInt(); 51 while (task > 0) { 52 task--; 53 int N = scanner.nextInt(); 54 int[] maze = new int[N + 1]; 55 int[][] mine = new int[2][N + 1]; 56 for (int i = 1; i <= N; i++) { 57 maze[i] = scanner.nextInt(); 58 } 59 flag1 = flag2 = true; 60 solve(maze, mine, N); 61 int hasMine = 0, noMine = 0;//统计有雷和没雷的数量 62 int[] hasMineAns = new int[N]; 63 int[] noMineAns = new int[N]; 64 if (flag1 && flag2) {//两种可能都成功 65 for (int i = 1; i <= N; i++) { 66 if (mine[0][i] == 1 && mine[1][i] == 1) {//同时为1(有雷) 67 hasMineAns[hasMine++] = i; 68 } else if (mine[0][i] == 0 && mine[1][i] == 0) {//同时为0(没雷) 69 noMineAns[noMine++] = i; 70 } 71 } 72 } else if (flag1 && !flag2) {//其中一种可能是成功的,另外一种失败 73 for(int i=1;i<=N;i++){ 74 if(mine[0][i]==1){ 75 hasMineAns[hasMine++] = i; 76 }else{ 77 noMineAns[noMine++] = i; 78 } 79 } 80 } else if (!flag1 && flag2) { 81 for(int i=1;i<=N;i++){ 82 if(mine[1][i]==1){ 83 hasMineAns[hasMine++] = i; 84 }else{ 85 noMineAns[noMine++] = i; 86 } 87 } 88 } 89 System.out.print(String.format("%d", hasMine)); 90 for(int i=0;i<hasMine;i++){ 91 System.out.print(String.format(" %d", hasMineAns[i])); 92 } 93 System.out.print(String.format("\n%d", noMine)); 94 for(int i=0;i<noMine;i++){ 95 System.out.print(String.format(" %d", noMineAns[i])); 96 } 97 System.out.println(); 98 } 99 scanner.close(); 100 } 101 }
转载于:https://www.cnblogs.com/pinxiong/p/5248573.html
hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一 最详细的解题报告相关推荐
- 《Java小游戏》:球球大作战
此文转载自:https://blog.csdn.net/pandas_dream/article/details/113086334 目录 游戏规则 主要实现方法 游戏流程展示 1. 开始游戏页面 2 ...
- hihoCoder 1052 基因工程 最详细的解题报告
题目来源:基因工程 解题思路:假设基因序列长度为N,则需要计算基因序列前K个和后K个相同所需要的最少改变次数sum. 假设基因序列为 ATACGTCT (即M=8),K=6:interval=M-K= ...
- 论AI小游戏是怎么练成的——『寻物大作战』原理揭秘
AI诞生以来,应用在了各个场景来帮助人们提高效率,优化体验.而在娱乐领域,越来越多的电子游戏开始将AI技术与游戏结合.今天我们为大家带来『寻物大作战』小游戏,真是称得上小小的身体,大大的能量!只要在规 ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain-创建窗体 BallJPanel- ...
- Unity3D小功能 小技巧 小教程 小原理(持续更新...)
Unity3D小功能 小技巧 小教程 小原理(持续更新...) 1.Unity的.NET版本是2.0 按道理来说,C#能用的功能Unity也能用,但是Unity的.NET却不是最新版 要是用一些别的D ...
- Python的一些小技巧小知识
Chapter 12. HOW-TO 本章内容记录Python的一些小技巧小知识.来源是网上摘录或自己学习所得. 如何判断操作系统类型 import sys print sys.platform pr ...
- yxy和志愿者小姐姐番外篇之大宝宝123追番记(补题,淘汰赛)
1264: yxy和志愿者小姐姐番外篇之大宝宝123追番记 时间限制: 1 Sec 内存限制: 64 MB ...
- 链表划分为左小、中相等、右大
解题思路:将一个链表分成三个链表,最后重新连接三个链表 (1)分成三个链表的过程是一致的:以左小链表为例依次遍历原链表的每一个节点cur,当cur->data<pivot时,把cur取出, ...
- Paddle.js PaddleClas 实战 ——『寻物大作战』AI 小游戏
1. 前言 AI 自诞生以来就应用在各个科技前沿领域,随着发展进程加快,在娱乐方面也有越来越多的趣味性游戏开始将AI融入其中.『寻物大作战』正是一款基于 AI 能力打造的趣味性小游戏,目的就是让玩家通 ...
最新文章
- Window 10 :如何彻底关闭:Windows Defender Service(2015-12-20日更新)
- 单链表反转的原理和python代码实现
- Android之用sharedUserId来实现不同应用(APK)数据共享
- Katy Perry - E.T.
- Extjs中的组件含有ID,会导致界面混乱。(textfield,comboBox等)
- matlab 游标 精度,如何在MATLAB数据光标中显示更高精度的数字?
- 建议0 不要让main函数返回void
- 征服RIA:函数式编程的原理
- android选择图片,通过uri获取路径
- Cisco常见命令大全
- Ubuntu:back up whole system
- Arm中国“战火”升级:第三封声明再次否认CEO吴雄昂被董事会罢免
- 2018 ps常用字体打包下载
- 计算机本地组策略编辑器在哪里,win7系统本地组策略编辑器在哪的操作方法
- 三件套都有什么_床上用品三件套,四件套,五件套,七件套分别包括的是哪些...
- 图像mnf正变换_基于MNF 变换的多元变化检测变化信息的集中
- 【CANN训练营第三季】【进阶班笔记3】PyTorch安装与环境配置
- 什么是SOA?为什么要SOA?
- 如何用 身份证OCR 接口进行快速开发
- setup time hold time violation
热门文章
- 奥特曼传奇英雄存档丢了怎么找回_热血传奇:道士最帅武器—玄天
- 自组网中继台_同频自组网基站
- Redhat Linux 7.3 虚拟机通过USB挂载NTFS格式的移动硬盘
- 移动端REM布局方案
- activiti jbpm相关资源
- 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]
- 使用PDFBox解析PDF文件
- maven常见问题问答 收藏
- 多线程创建方式 线程池、Future和CompletableFuture
- idea的plugins无法使用marketplace plugins are not loaded