洛谷P1331海战
题目描述
在峰会期间,武装部队得处于高度戒备。警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机。此外,巡洋船只和舰队将被派去保护海岸线。
不幸的是因为种种原因,国防海军部仅有很少的几位军官能指挥大型海战。因此,他们考虑培养一些新的海军指挥官,他们选择了“海战”游戏来帮助学习。
在这个著名的游戏中,在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其它的船。
在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形。编写程序求出该棋盘上放置的船只的总数。
输入输出格式
输入格式:
输入文件头一行由用空格隔开的两个整数R和C组成,1<=R,C<=1000,这两个数分别表示游戏棋盘的行数和列数。
接下来的R行每行包含C个字符,每个字符可以为“#”,也可为“.”,“#”表示船只的一部分,“.”表示水。
输出格式:
为每一个段落输出一行解。如果船的位置放得正确(即棋盘上只存在相互之间不能接触的方形,如果两个“#”号上下相邻或左右相邻却分属两艘不同的船只,则称这两艘船相互接触了)。
就输出一段话“There are S ships.”,S表示船只的数量。
否则输出“Bad placement.”。
输入样例#1:
6 8
.....#.#
##.....#
##.....#
.......#
#......#
#..#...#
输出:
There are 5 ships.
分析:
在洛谷上做这道题时晃一眼我还以为是联通块的水题,所以我快乐的敲起了联通块= =结果63分,那么正解是什么?
由题目可以知道图中不能出现以下几种情况:
1: 2: 3: 4:
# # . # # . # . . . . #
# . . . . # # # . . # #
知道了这个我们只需要特判以下就可以的得出结
代码:
#include <iostream>
#include <queue>
#include <cstring>
#include <string>
using namespace std;
const int N=+;
char Map[N][N];
bool vis[N][N],judge[N][N],fin;
int n,m,startx,starty,keay;
int dirx[]={,,-,};
int diry[]={,,,-};
struct Node
{
int x,y;
};
void bfs()
{
vis[startx][starty]=true;
judge[startx][starty]=false;
queue<struct Node> que;
struct Node now;
now.x=startx;now.y=starty;
que.push(now);
while(!que.empty())
{
now=que.front();
que.pop();
for(int i=;i<;i++)
{
int xx=now.x+dirx[i];
int yy=now.y+diry[i];
if(xx<||xx>n||yy<||yy>m) continue;
if(Map[xx][yy]=='.') continue;
if(vis[xx][yy]) continue;
vis[xx][yy]=true;
judge[xx][yy]=false;
struct Node next;
next.x=xx;next.y=yy;
que.push(next);
}
}
return;
}
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
cin>>Map[i][j];
if(Map[i][j]=='#')
judge[i][j]=true;
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)//特判
{
if(Map[i][j]=='#'&&Map[i][j+]=='#'&&Map[i+][j]=='#'&&Map[i+][j+]=='.') fin=true;
if(Map[i][j]=='#'&&Map[i][j+]=='#'&&Map[i+][j+]=='#'&&Map[i+][j]=='.') fin=true;
if(Map[i][j]=='#'&&Map[i+][j]=='#'&&Map[i+][j+]=='#'&&Map[i][j+]=='.') fin=true;
if(Map[i][j+]=='#'&&Map[i][j]=='.'&&Map[i+][j]=='#'&&Map[i+][j+]=='#') fin=true;
}
}
if(!fin)//如果没有出现那4种情况
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(judge[i][j])
{
startx=i;starty=j;
bfs();
keay++; //记下联通块的个数
}
}
}
cout<<"There are "<<keay<<" ships."<<endl;
}
else
cout<<"Bad placement."<<endl;
return ;
}
洛谷P1331海战的更多相关文章
- 洛谷——P1331 海战
P1331 海战 题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防 ...
- 洛谷P1331 海战
海战 题目链接 这还是一道联通块的题,只是需要判断是否存在以下四种情况: o. .o oo oo oo oo o. .o 如果存在就是Bad placement. 要注意标记以下,不然会出现多次输出B ...
- 洛谷 P1331 海战
传送门 题解:由于船是方形的,所以比较简单.但是考试的时候跪了,orz.忘了考虑类似一圈井号中间有一摊水. 可以只考虑这个点上方和左边点的情况,这样分为四种情况.一种是左边是一滩水, ...
- 洛谷P1331 海战 题解
题目传送门 思路 肯定食用dfs啦... 但关键是两条船接触了怎么判断呢?? 上图: 可以发现一下规律 当两条船接触时,必有一条直线连续穿过两条船 当一条船不与另一条船接触时,没有一条直线连续穿过两条 ...
- 海战(洛谷 P1331)
题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- 【[TJOI2018]异或】
写板子了,可持久化\(Trie\)的板子了 其实和主席树写法类似,还是存好左右儿子之后存好权值 之后差分去查询就好了 这道题第一问我们直接\(dfs\)序转化成区间 第二问搞成\(x,y,lca(x, ...
- 2017.11.22 mysql数据库实现关联表更新sql语句
比如有两张表,其中一张表某个字段的值要关联另一张表进行统计,就要用到mysql的update方法,并且left join另一张表进行联合查询. mysql关联表更新统计 sql语句如下: 代码如下 复 ...
- Javascript Ajax 请求
var XMLHttpReq; function createXMLHttpRequest() { try { XMLHttpReq = new ActiveXObject("Msxml2. ...
- Linux利用i节点删除乱码文件
Linux删除乱码文件 当文件名为乱码的时候,无法通过键盘输入文件名,所以在终端下就不能直接利用rm,mv等命令管理文件了. 但是我们知道每个文件都有一个i节点号,我们可以考虑通过i节点号来管理文件. ...
- 第24章 SPI—读写串行FLASH—零死角玩转STM32-F429系列
第24章 SPI—读写串行FLASH 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- HttpServerUtility 和 HttpUyility
参考:msdn HttpServerUtility 提供用于处理 Web 请求的 Helper 方法. 2017/08/07 加密解码 这个类没有构造函数,所以不能直接new. ...
- with(){}方法
<html><head><script type="text/javascript">function validate_email(field ...
- 【Java】数组知识回顾
package another; import java.util.Arrays; import java.util.List; /** * 数组知识回顾 * @author ChristineBas ...
- js、jquery中全局替换replace
str.replace(/需要替换的/g,"新字符串") //此处使用正则表达式
- 一张思维导图带你梳理HashMap相关知识
HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...