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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win8计算机可用内存不足,Win8.1玩游戏提示计算机内存不足,Win8.1内存不足怎么办?...

Win8.1玩游戏提示计算机内存不足,Win8.1内存不足怎么办?有朋友使用Win8.1系统&#xff0c;这一段时间&#xff0c;在玩游戏(如孤岛危机3、鬼泣4)过程中&#xff0c;频繁出现下面提示框&#xff1a;关闭程序以防止信息丢失计算机的内存不足。请保存文件并关闭这些程序Windows将…

谈谈对python这门课的认识_【Python公开课】1-认识Python

一、 课程介绍● 初识 Python● Hello,World● print()● 顺序执行、注释二、重难点解析为什么选择 Python&#xff1f;Python 是一门对初学者最友好的编程语言&#xff0c;人们可以利用它轻松地实现想要的功能&#xff0c;将更多精力和时间花在更应该专注思考的地方。本节课将…

软件测试作业(一)

说起程序中的bug&#xff0c;真是一个令所有程序员深恶痛绝的东西&#xff0c;然而大部分都是源于接触少&#xff0c;缺乏经验。 在上学期javaWeb大作业中&#xff0c;在写一个jsp的时候&#xff0c;由于一个button的功能是提交&#xff0c;于是把这个button的name赋值为submit…

怎么在服务器上加端口映射,Windows服务器中命令行添加端口映射

微软Windows的netsh工具可以查看或变更本地计算机或远程计算机的网络配置。不仅可以在本地计算机上运行这些命令&#xff0c;而且可以在服务器上直接运行&#xff0c;本文对一些特定部署环境的服务器配置有一定帮助。首先使用查看当前端口映射配置&#xff1a;netsh interface …

python企业微信回调_回调模式

回调模式在回调模式下&#xff0c;企业不仅可以主动调用企业号接口&#xff0c;还可以接收成员的消息或事件。接收的信息使用XML数据格式、UTF8编码&#xff0c;并以AES方式加密。企业号的每个应用都有自己的回调模式开关。在管理端开启并设置好相关参数后&#xff0c;此应用的…

Centos7 Apache 2.4.18编译安装

安装环境&#xff1a;CentOS Linux release 7.0.1406 (Core) 0x01 到官网http://httpd.apache.org/download.cgi#apache24下载apache http最新版 tar zxf httpd-2.4.18.tar.gz [rootlocalhost httpd-2.4.18]# rpm -qa | grep apr 查看当前主机上是否安装apr/apr-util,…

css划上去变长,Css3如何实现鼠标移上变长特效?(图文+视频)

本篇文章主要给大家介绍用css3实现鼠标移入变长效果的方法。在前端页面设计中&#xff0c;css的功能是异常强大的&#xff0c;只要运用好它&#xff0c;你能实现很多网站各种精彩的动态效果。那么在之前的文章中也给大家分享介绍了一些用css实现动画效果的方法&#xff0c;比如…

python两个同切圆_求两个圆的交点

我试图在Python中找到两个圆之间的交集(使用Matplotlib)&#xff0c;但是找不到任何值。在为此&#xff0c;我为每个单独的圆创建X和Y的列表(Matplotlib在绘制圆时将第一个参数作为X值&#xff0c;第二个参数作为Y值)&#xff0c;然后相应地使列表相交(例如&#xff0c;circle1…

oracle性能优化之awr分析

oracle性能优化之awr分析 作者&#xff1a;bingjava 最近某证券公司系统在业务期间系统运行缓慢&#xff0c;初步排查怀疑是数据库存在性能问题&#xff0c;因此导出了oracle的awr报告进行分析&#xff0c;在此进行记录。 导致系统的性能问题有很多&#xff0c;比如内存、cpu占…

小米路由器怎么连接无盘服务器,播放器+服务器的方法瞬间玩转小米路由方法图文介绍...

“厨具”&#xff1a;小米路由及其外接硬盘、安卓手机、威动播放器(VidOn Player)、威动服务器(VidOn Server)“食材”&#xff1a;冰雪奇缘、生活大爆炸用两种方法将其“熬制”&#xff0c;时间短、内容丰富&#xff0c;“营养价值”相当的高。一、将小米路由作为NAS&#xff…

python json.loads namespace_python json.loads兼容单引号数据的方法

Python的json模块解析单引号数据会报错&#xff0c;示例如下>>> import json>>> data "{field1: 0, field2: hehehehe, field3: hahaha}">>> json.loads(data)Traceback (most recent call last):File “”, line 1, inFile “/usr/lib/…

@class #import辨析 #include

解析&#xff1a; 很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在 .m 文件中&#xff0c;而 .h 文件仅仅使用class进行声明&#xff0c;不禁纳闷起来&#xff0c;为什么不直接把#import放到h文件中呢&#xff1f; 这是因为 .h 文件在修改后&…

修改数据包欺骗服务器,Fiddler协议捕获编辑工具与Session欺骗原理详解

今天Kitty主要与大家分享Fiddler抓包工具与协议捕获编辑工具来与大家讲解Session欺骗原理过程&#xff0c;咱们主要通过Fiddller协议捕获工具来对比HTTPWatch两款工具之间的差别&#xff0c;最主要的是我们可以通过捕获到的请求进行二次编辑重新发送给服务器&#xff0c;这中间…

统计源期刊目录_统计源期刊是什么意思

统计源期刊是什么意思&#xff1f;统计源期刊全称中国科技论文统计源期刊&#xff0c;也就是我们常说的科技核心期刊&#xff0c;科技核心期刊是我国核心期刊体系中的一类&#xff0c;在国内个人评职晋升、学术评估中占据着重要地位&#xff0c;统计源期刊也是根据期刊多方面指…

ajax 请求post和get,ajax请求get和post

ajax请求get和post 内容精选换一换正常返回值类型说明200OKGET、PUT、POST操作正常返回204No ContentDELETE操作正常返回异常返回值说明400 Bad Request服务器未能处理请求。401 Unauthorized被请求的页面需要用户名和密码。403 Forbidden对被请求页面的访问被禁止。404 Not Fo…

python requests 重试_我可以为requests.request设置最大重试次数吗?

这不仅会改变最大重试次数&#xff0c;而且还会启用回退策略&#xff0c;使所有http://地址在重试前睡眠一段时间(总共5次)&#xff1a;import requestsfrom urllib3.util.retry import Retryfrom requests.adapters import HTTPAdapters requests.Session()retries Retry(to…

产品专家Marty Cagan:不做仅仅会编码的人

Marty Cagan是享有世界声誉的产品管理专家&#xff0c;曾担任Netscape副总裁、eBay产品管理及设计高级副总裁。近日&#xff0c;记者在“PM-China首届产品经理高峰论坛”上对他做了专訪&#xff0c;请他分享自己的产品管理历程。 程序猿的工作 《程序猿》&#xff1a;据我所知。…

网页底部的版权信息_Shopify底部的版权信息(Powered by Shopify )如何删除

大多数新的Shopify商店所有者通常在一开始就遇到一个小问题。他们通常想摆脱商店页脚中的“Powered by Shopify”文本/链接。Shopify提供支持的含义是什么&#xff1f;Shopify是一个电子商务平台&#xff0c;可帮助创建和自定义电子商务商店。当您在此平台上创建商店时&#xf…

ftp 服务器 文件 连接 导出,ftp 服务器 文件 连接 导出

ftp 服务器 文件 连接 导出 内容精选换一换“数据导入”章节适用于MRS 3.x及后续版本。Loader是实现MRS与外部数据源如关系型数据库、SFTP服务器、FTP服务器之间交换数据和文件的ETL工具&#xff0c;支持将数据或文件从关系型数据库或文件系统导入到MRS系统中。Loader支持如下数…

自己的碎碎念

各位mmgg们&#xff0c;我是一个人见人爱&#xff0c;车载车爆胎的mm。 想知道我的年龄吗&#xff1f;我偷偷告诉你我正在学校和社会间徘徊&#xff08;年龄大了都不好意思明说了&#xff0c;没错&#xff0c;我就是娇羞&#xff09; 想知道我的职业吗&#xff1f;我想聪明的人…