贤鱼的刷题日常--海战

news/2024/5/1 3:21:05/文章来源:https://blog.csdn.net/m0_66623111/article/details/127147268

🏆今日学习目标:
🍀学习了解sql注入漏洞
✅创作者:贤鱼
⏰预计时间:15分钟
🎉个人主页:贤鱼的个人主页
🔥专栏系列:c++

请添加图片描述

海战

  • 题目
  • 思路
  • AC代码

题目

小理最近痴迷于航海游戏,他发现了一个著名的经典海战游戏,准备大展身手。在这
个著名的游戏中,在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其
它的船。在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形。编写
程序求出该棋盘上放置的船只的总数。
输入:
输入第一行由用空格隔开的两个整数 R 和 C 组成,这两个数分别表示游戏棋盘的行
数和列数。接下来的 R 行每行包含 C 个字符,每个字符可以为“#”,也可为“.”,“#”表
示船只的一部分,“.”表示水。
输出:
为每一个段落输出一行解。如果船的位置放得正确(即棋盘上只存在相互之间不能接
触的方形,如果两个“#”号上下相邻或左右相邻却分属两艘不同的船只,则称这两艘船相
互接触了)。就输出一段话“There are S ships.”,S 表示船只的数量。否则输出“Bad placement.”
对于 100%的数据有: 1<=R,C<=1000

样例输入:
6 8
…#.#
##…#
##…#
…#
#…#
#…#…#

样例输出:
There are 5 ships.

思路

第一眼看到这个题目,以为就是一个染色问题,但是题目中说了,方形的船
所以这就是这个题的难点
解决方法如下

我们记录下走过的所有点,然后记录下横纵坐标最大的点
用最大的点求出面积,并且和遍历的点比较
如果一样就是方形,不一样就输出bad placement.

理论成立下面来实现一下

AC代码

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int dx[5]={0,1,-1,0,0
};
int dy[5]={0,0,0,1,-1
};
struct node{int x,y;
};
int sum;//记录每次遍历个数
int vis[1001][1001];
char mapp[1001][1001];
int n,m;
int ans=0;
int mx,my;
int bfs(int x,int y){
queue<node> q;
mx=x,my=y;
q.push((node){x,y});
vis[x][y]=1;
while(!q.empty()){node w=q.front();q.pop();for(int i=1;i<=4;i++){int tx=dx[i]+w.x;int ty=dy[i]+w.y;if(tx<=0||ty<=0||tx>n||ty>m||mapp[tx][ty]=='.'||vis[tx][ty]) continue;//先判断出界,能不能走和走没走过if(tx>mx) mx=tx;if(ty>=my) my=ty;//记录最大数据vis[tx][ty]=1;mapp[tx][ty]='.';q.push((node){tx,ty});sum++;}
}
if(sum==(mx-x+1)*(my-y+1)) return 1;//比较
else return 0;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>mapp[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(mapp[i][j]=='#'){sum=1;//遍历一下,由于在搜索的时候会改地图,所以这样遍历可以if(bfs(i,j)){ans++;}else{cout<<"Bad placement.";return 0;}}}}cout<<"There are "<<ans<<" ships.";}

请添加图片描述

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

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

相关文章

AI深度学习入门与实战06 线性回归模型:在问题中回顾与了解基础概念

学到这里相信你已经了解了深度学习&#xff0c;知道该如何训练模型、如何评估模型&#xff0c;并且掌握了一种叫作人工神经网络的算法。正所谓温故而知新&#xff0c;这节课我会通过一个线性回归模型将前面的知识串起来&#xff0c;做一个完整的回顾。 线性回归是一个最基本的…

【牛客刷题--SQL篇】基础查询 SQL3查询结果去重SQL4查询结果限制返回行数SQL5将查询后的列重新命名

个人主页&#xff1a;与自己作战 牛客刷题系列篇&#xff1a;【SQL篇】【Python篇】【Java篇】 推荐刷题网站注册地址&#xff1a;【牛客网–SQL篇】 推荐理由&#xff1a;从0-1起步,循序渐进 文章目录一、基础查询1、基础查询1.1 SQL3 查询结果去重1.2 SQL4查询结果限制返回行…

Go设计模式学习准备——下载bilibili合集视频

需求 前段时间面试,被问到设计模式。说实话虽然了解面向对象、多态,但突然被问到设计模式,还要说清解决什么问题,自己是有些懵的,毕竟实习主要工作是在原项目基础进行CRUD,自己还是没有深度思考,所以只能简单介绍自己知道的简单工厂模式等。趁着回家这段假期,充电学习一…

VS2022编译错误:链接器工具错误 LNK2005

产生原因 自己在学习namespace时,参照C++ plus一书写了基本相同的代码,分别定义了h文件和两个CPP文件,其中一个CPP用来定义变量,一个CPP用来跑main(void)。文件代码如下: head.h文件 #pragma once #include<string> #include <iostream>namespace pers {struc…

对于在网页中实现数据库数据的遍历

基于套用了网站模板,然后连接了数据库 具体实现如下:1、定义一个实体类Uesr package org.example;public class User {private String name;private String id;private String teacher;private String whe;public void setName(String name){this.name=name;}public String g…

【ES6丨前端进阶基础 】ES6的关键字,新特性以及解构赋值

&#x1f482; 个人主页&#xff1a;Aic山鱼 个人社区&#xff1a;山鱼社区 &#x1f4ac; 如果文章对你有所帮助请点个&#x1f44d;吧!欢迎关注、点赞、收藏(一键三连)和订阅专目录 前言 什么是ecmascrpit 一&#xff0c;let关键字的特点 1.不能重复声明变量 2.块级作用…

【持久层框架】- SpringData - JPA

SpringData - JPA &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 一个有梦有戏的人 怒放吧德德 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0c;…

图解mysql(六)——内存篇

6 揭开Buffer Pool的面纱 6.1 为什么要有Buffer Pool&#xff1f; 虽然说 MySQL 的数据是存储在磁盘里的&#xff0c;但是也不能每次都从磁盘里面读取数据&#xff0c;这样性能是极差的。 要想提升查询性能&#xff0c;加个缓存就行了嘛。所以&#xff0c;当数据从磁盘中取出…

基于BootStrap的农业信息数据收集与管理平台设计

目 录 1 前言 1 1.1 研究背景 1 1.2 研究内容 1 1.3 研究意义 1 1.4 本论文工作和章节内容 2 2 系统环境与技术支持 3 2.1 系统环境 3 2.2 B/S架构 3 2.3 服务端技术 3 2.3.1 MVC模式 3 2.3.2 Spring框架 4 2.3.3 Hibernate框架 4 2.3.4 MySQL数据库 5 2.4 前端技术 5 2.4.1 Bo…

基于JavaWeb的企业出差费用报销管理系统设计与实现

目录 第一章 绪论 1 1.1 出差报销管理系统的开发背景 1 1.2设计目的与意义 1 第二章 系统需求分析 2 2.1 可行性分析 2 2.1.1 操作可行性 2 2.1.2 经济可行性 2 2.1.3 技术可行性 2 2.2方案的设计与比较 2 2.2.1 C/S设计结构和B/S设计结构比较 2 2.2.2 系统模式的设计 3 2.2.3系…

大二数据库实验-MySQL语句(Employee、Department、Salary)

实验所用到的的几张表&#xff1a; 显示Employee表中姓王的记录。 显示salary 表中InCome大于2000的数据。 显示salary 表中InCome在2500到3000之间的数据。 显示Employee表中在1968年下半年出生的数据。 分别显示三个表中总记录条数。 显示salary表中收入和支出总…

(附源码)计算机毕业设计ssm财务管理系统

毕设帮助&#xff0c;指导&#xff0c;本源码分享&#xff0c;调试部署(见文末) 3.2.1系统开发流程 财务管理系统开发时&#xff0c;首先进行需求分析&#xff0c;进而对系统进行总体的设计规划&#xff0c;设计系统功能模块&#xff0c;数据库的选择等&#xff0c;本系统的…

权限控制WAF绕过之木马混淆免杀

目录 前言&#xff1a; 绕过思路&#xff1a; &#xff08;一&#xff09;变量覆盖 &#xff08;二&#xff09;加密混杂 未加密前&#xff1a; 接口加密 加密后&#xff1a; WAF验证&#xff1a; &#xff08;三&#xff09;异或生成 0x01 原理&#xff1a; 0x02 适用…

线段树什么的最讨厌了

发现如果正着从一颗线段树搜到这一个区间,很难搜。所以考虑从一个区间搜出一颗线段树。 对于一个区间 \([l,r]\),他的父亲区间只可能是 \([2*l-r-2,r],[2*l-r-1,r],[l,2*r-l],[l,2*r-l-1]\) 四种情况。 发现无论往哪一种方向走,\(\frac{l}{r-l+1}\) 的值都会除以2.那么这么做…

建立对单片机/嵌入式启动、运行的整体认知

文章目录一、51单片机的启动过程二、STM32的完整启动流程分析1. 根据boot引脚决定三种启动模式2. 启动后bootloader做了什么&#xff1f;3. bootloader中对内存的搬移和初始化4. ISP、IAP、ICP三种烧录方式5. 参考资料从上电到启动&#xff0c;一文读懂STM32启动全流程1、直接上…

m基于FPGA的cordic算法实现,输出sin和cos波形(包括仿真录像)

目录 1.源码获取方式 2.算法描述 3.部分程序 4.部分仿真图预览 1.源码获取方式 使用版本matlab2022a 获取方式1&#xff1a; 点击下载链接&#xff08;解压密码C123456&#xff09;&#xff1a; m基于FPGA的cordic算法实现,输出sin和cos波形 获取方式2&#xff1a; 如…

程序员的数学课21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?

在上一讲的最后&#xff0c;我们提到过“浅层模型”和“深层模型”。其实&#xff0c;人工智能的早期并没有“浅层模型”的概念&#xff0c;浅层模型是深度学习出现之后&#xff0c;与之对应而形成的概念。在浅层模型向深层模型转变的过程中&#xff0c;神经网络算法无疑是个催…

Vue2 生命周期

Vue 生命周期 概述在使用 Vue 时,我们需要执行一些 JS 代码。比如我们需要在页面中添加一个定时器来固定间隔更新时间。这时我们可能会想到直接在,Vue 实例外书写 JS 代码。这种方法能完成操作,但是 Vue 并不建议这样写。Vue 建议尽量在 Vue 实例中完成所有的操作。这时我们…

Hadoop3.X安装教程(Ubuntu)

前提:一台纯净的Ubuntu机器(虚拟机安装教程略) ctrl + alt + T 打开bash,全程使用bash指令进行,以hadoop 和 java 8为例 首先换源进入root账户 sudo su -升级软件列表 apt-get update安装vim apt install vim中途询问直接输入Y确认下载hadoop和java 创建/data mkdir /data…

半导体中的缺陷和位错能级

点缺陷&#xff1a; 在一定的温度下&#xff0c;组成晶体的格点原子在平衡位置附近做振动&#xff0c;这些振动就会有强有弱&#xff0c;这样会使得一部分原子可以获得足够的能量&#xff0c;而挣脱周围电子对它的束缚&#xff0c;挤入间隙位置&#xff0c;这样的结果就形成了…