1.17 刷题

news/2025/1/17 17:46:38/文章来源:https://www.cnblogs.com/Mikkeykarl/p/18677459

1 思路

P1331 海战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 本题难点主要是如何分辨哪些穿是相撞而产生无效,哪些是有效
  • 很容易想到的是,不论是bfs还是dfs都可以轻松全部搜掉,只需要简单的遍历所有点,然后套板子即可
  • 但是这是无法排除无效情况的,也就是相撞的情况
  • 推敲一下,发现其实就只有4种情况会无效

  • 那么只要写个判断函数就可以排除这四种情况
  • 即只需要dfs搜索+判断即可解决这道题

2 代码

#include<iostream>
#include<map>
#include<cstdio>
#include<cstring>
using namespace std;const int N = 1e3 + 10;
int m[N][N];
bool str[N][N];
int r, c, ans;
int dx[] = {0, 1, 1};
int dy[] = {1, 0, 1};int Judge(int x, int y) {int d1 = m[x][y];int d2 = m[x + 1][y];int d3 = m[x][y + 1];int d4 = m[x + 1][y + 1];// for(int i = 0; i < 2; i++) {//    for(int j = 0; j < 2; j++) {//       int nowx = x + dx[i];//       int nowy = y + dy[i];//       if(nowx <= c && nowy <= r) {//          if(m[nowx][nowy] == 1) {//             str[nowx][nowy] = 1;//          } else {//             return -1;//          }//       }//    }// }if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 0) return -1;if(d1 == 1 && d4 == 1 && d3 == 1 && d2 == 0) return -1;if(d1 == 1 && d2 == 1 && d4 == 1 && d3 == 0) return -1;if(d4 == 1 && d2 == 1 && d3 == 1 && d1 == 0) return -1;return 1;
}int po() {for(int i = 1; i <= r; i++) {for(int j = 1; j <= c; j++) {int pan = Judge(i,j);if(pan == -1) {cout<<"Bad placement."<<endl;return -1;}}}return 0;
}void dfs(int x, int y) {for(int i = 0; i < 3; i++) {int nowx = x + dx[i];int nowy = y + dy[i];if(m[nowx][nowy] == 1 && str[nowx][nowy] == false) {str[nowx][nowy] = true;dfs(nowx, nowy);}}
}int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);memset(m, 0, sizeof(m));memset(str, false, sizeof(str));cin>>r>>c;for(int i = 1;i <= r; i++) {for(int j = 1;j <= c; j++) {char s;cin>>s;if(s == '#') {m[i][j] = 1;}}}int k = po();if(k == -1) return 0;memset(str, false, sizeof(str));for(int i = 1;i <= r; i++) {for(int j = 1;j <= c; j++) {if(m[i][j] == 1 && str[i][j] == false) {str[i][j] = true;dfs(i, j);ans++;}}}cout<<"There are "<<ans<<" ships.";return 0;}
import java.util.Scanner;public class Main {static final int N = 1010;static int[][] m = new int[N][N];static boolean[][] str = new boolean[N][N];static int r, c, ans;static int[] dx = {0, 1, 1};static int[] dy = {1, 0, 1};public static int Judge(int x, int y) {int d1 = m[x][y];int d2 = m[x + 1][y];int d3 = m[x][y + 1];int d4 = m[x + 1][y + 1];if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 0) return -1;if(d1 == 1 && d4 == 1 && d3 == 1 && d2 == 0) return -1;if(d1 == 1 && d2 == 1 && d4 == 1 && d3 == 0) return -1;if(d4 == 1 && d2 == 1 && d3 == 1 && d1 == 0) return -1;return 1;}public static int po() {for(int i = 1; i <= r; i++) {for(int j = 1; j <= c; j++) {int pan = Judge(i,j);if(pan == -1) {System.out.println("Bad placement.");return -1;}}}return 0;}public static void dfs(int x, int y) {for(int i = 0; i < 3; i++) {int nowx = x + dx[i];int nowy = y + dy[i];if(m[nowx][nowy] == 1 && str[nowx][nowy] == false) {str[nowx][nowy] = true;dfs(nowx, nowy);}}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);r = scanner.nextInt();c = scanner.nextInt();for(int i = 1;i <= r; i++) {String s1 = scanner.next();for(int j = 1;j <= c; j++) {char s;s = s1.charAt(j - 1);if(s == '#') {m[i][j] = 1;}}}int k = po();if(k == -1) return;for(int i = 1;i <= r; i++) {for(int j = 1;j <= c; j++) {if(m[i][j] == 1 && str[i][j] == false) {str[i][j] = true;dfs(i, j);ans++;}}}System.out.println("There are " + ans + " ships.");return;}}

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

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

相关文章

阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化

在直播场景中,阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力,确保直播间高并发时的流畅体验,降低了我们的运营成本,简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力,实现了数据库资源按需自动扩展,在优化成本的同时极大增强了业…

轻松在线将您的照片转化为波普艺术(Pop Art),感受色彩与创意

如果你曾想过将你的照片变成一幅充满活力的波普艺术作品,那么 img4you 提供的这一在线工具,正是帮助你实现创意梦想的最佳选择。波普艺术以其大胆的色彩、夸张的视觉效果,赢得了艺术爱好者和创意工作者的喜爱。现在,你只需上传一张普通照片,选择自己钟爱的波普艺术风格,就…

Qwen2.5 的云端新体验,5 分钟完成极速部署

Qwen2.5 是通义千问团队开发的大规模语言和多模态系列模型,以其长文本处理能力、专业知识集成、大规模数据集预训练以及多语言处理等优势,为用户提供了快速、准确的响应,成为企业智能化转型的有效工具。Qwen2.5 是通义千问团队开发的大规模语言和多模态系列模型,以其长文本…

Chrome浏览器访问网址报错:Whitelabel Error Page!

谷歌浏览器访问网址时,报错: Whitelabel Error Page 原因分析:由于该网址暂时没有找到页面,导致指向错误。 本例说明:原网址对应解析的二级域名为 566.example.com,现在改为aibf.example.com;因为新该的二级域名,暂时解析未生效,导致报错。 处理方法:1.确认二级域名解…

java基础Day3 java语法

java语法 新建一个空项目,在项目中新建一个java模块 文件菜单中打开项目结构,SDK有报红,要手动选,语言级别也要和SDK对应注释 //单行注释/*多行 注释*//**文档注释* @Description HelloWorld* @Author tse121*/标识符 关键字Demo01所有的标识符都应该以大小写字母、美元符$…

LossVal:一种集成于损失函数的高效数据价值评估方法

在机器学习领域,训练数据的价值并非均等:部分训练数据点对模型训练的影响显著高于其他数据点。评估单个数据点的影响程度通常需要反复重训练模型,计算效率低下。LossVal提出了一种创新方法,通过将数据价值评估过程直接集成到神经网络的损失函数中,实现了高效的数据价值评估…

企业项目管理工具选择:多维度评估,精准决策

企业在选择项目管理工具时,应综合考虑需求、服务商与产品、试用体验、培训与实施以及市场推荐与排行榜等多个因素。通过全面评估这些因素,企业可以选择出最适合自己的项目管理工具,从而提升项目管理效率和团队协作能力。企业在选择适合自己的项目管理工具时,需要考虑多个因…

工作也有利息

一、工作也有利息 银行存款有利息,存得越久,利息越多。 工作也是一样,也有利息。如果今年的工作可以节省明年或未来的工作时间,就是一份有利息的工作。工作有利息,意味着你未来的工作时间会变少,多出来的时间,就可以去做别的事情,创造更多的价值。 这提示我们: (1)不…

docker swarm ingress网络

DOCKER INGRESS 介绍 # docker ingress官网介绍:https://docs.docker.com/engine/swarm/ingress/如docker官网所述,swarm 模式下使用ingress routing mesh 路由,可以实现服务在一个节点发布后,访问swarm任意节点地址都可以访问到该服务,即使该node节点没有该服务副本在运行…

windows11 远程桌面 自动断开连接原因

前短时间始终找不到远程桌面断开连接的原因就,今天终于找到原因了原因是前段时间自己更改端口得时候,只修改了一个,导致部分数据会报错。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp和HKEY_LOCAL_MACHINE\SYSTEM\CurrentContr…

记录电脑无法挂载nas硬盘

今天试了好几次始终报错,突然发现了问题所在 直接使用根目录是会报错得如图:直接报错,但是直接在地址栏输入是可以成功得。如图:时候证明不能直接挂载根目录,需要挂到根目录下一级

岸场桥对位引导系统(CPS)

岸场桥对位引导系统(CPS),是由经纬恒润自主研发的一款基于多线激光雷达的车辆精准对位产品。CPS能够快速为无人集卡及港口有人车辆提供具体距离与方向上的引导,从而为装卸集装箱的过程实现高度自动化提供保证。相对传统基于单线激光雷达的CPS,经纬恒润CPS具有多车道同时检…