洛谷P1331 海战
海战
题目链接
这还是一道联通块的题,只是需要判断是否存在以下四种情况:
o. .o oo oo
oo oo o. .o
如果存在就是Bad placement.
要注意标记以下,不然会出现多次输出Bad placement.的情况。
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define MAXN 10010
using namespace std;
char G[MAXN][MAXN];
int vis[MAXN][MAXN];
int cnt;
int color;
struct item
{
int x;
int y;
};
int R,C;
queue<item>q;
void bfs(item t)
{
q.push(t);
vis[t.x][t.y]=color;
while(!q.empty())
{
item r;
r=q.front();
q.pop();
//if(vis[r.x][r.y]!=0) continue;
if(G[r.x+1][r.y]=='#'&&r.x+1<=R&&vis[r.x+1][r.y]==0)
{
vis[r.x+1][r.y]=color;
item t2;
t2.x=r.x+1;
t2.y=r.y;
q.push(t2);
}
if(G[r.x-1][r.y]=='#'&&r.x-1>=1&&vis[r.x-1][r.y]==0)
{
vis[r.x-1][r.y]=color;
item t2;
t2.x=r.x-1;
t2.y=r.y;
q.push(t2);
}
if(G[r.x][r.y+1]=='#'&&r.y+1<=C&&vis[r.x][r.y+1]==0)
{
vis[r.x][r.y+1]=color;
item t2;
t2.x=r.x;
t2.y=r.y+1;
q.push(t2);
}
if(G[r.x][r.y-1]=='#'&&r.y-1>=1&&vis[r.x][r.y-1]==0)
{
vis[r.x][r.y-1]=color;
item t2;
t2.x=r.x;
t2.y=r.y-1;
q.push(t2);
}
}
}
int main()
{
scanf("%d%d",&R,&C);
for(int i=1;i<=R;i++)
{
for(int j=1;j<=C;j++)
{
cin>>G[i][j];
}
}
item t;
for(int i=1;i<=R;i++)
{
for(int j=1;j<=C;j++)
{
if(G[i][j]=='#')
{
t.x=i;
t.y=j;
if(vis[i][j]==0)
{
cnt++;
color++;
bfs(t);
}
}
}
}
bool sign=0;
for(int i=1;i<=R;i++)
{
for(int j=1;j<=C;j++)
{
if(G[i][j]=='#'&&G[i+1][j]=='#'&&!sign&&G[i][j+1]=='#'&&G[i+1][j+1]=='.')
{
printf("Bad placement.");
sign=1;
}
else if(G[i][j]=='#'&&G[i+1][j]=='#'&&!sign&&G[i][j+1]=='.'&&G[i+1][j+1]=='#')
{
printf("Bad placement.");
sign=1;
}
else if(G[i][j]=='#'&&G[i+1][j]=='.'&&!sign&&G[i][j+1]=='#'&&G[i+1][j+1]=='#')
{
printf("Bad placement.");
sign=1;
}
else if(G[i][j]=='.'&&G[i+1][j]=='#'&&!sign&&G[i][j+1]=='#'&&G[i+1][j+1]=='#')
{
printf("Bad placement.");
sign=1;
}
}
}
// for(int i=1;i<=R;i++)
// {
// for(int j=1;j<=C;j++)
// {
// cout<<G[i][j];
// }
// cout<<endl;;
// }
if(!sign)
{
printf("There are %d ships.",color);
}
// for(int i=1;i<=R;i++)
// {
// for(int j=1;j<=C;j++)
// {
// printf("%d ",vis[i][j]);
// }
// cout<<endl;;
// }
return 0;
}
洛谷P1331 海战的更多相关文章
- 洛谷P1331海战
题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线. 不幸的是因为种种原因,国防海军部仅有很少的 ...
- 洛谷——P1331 海战
P1331 海战 题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防 ...
- 洛谷 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 ...
随机推荐
- 监控系统 - mk-livestatus
/usr/bin/unixcat /usr/lib64/check_mk/livestatus.o /etc/xinetd.d/livestatus service livestatus { type ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- 笨办法学Python(三十一)
习题 31: 作出决定 这本书的上半部分你打印了一些东西,而且调用了函数,不过一切都是直线式进行的.你的脚本从最上面一行开始,一路运行到结束,但其中并没有决定程序流向的分支点.现在你已经学了 if, ...
- MySQL数据库实验六:存储过程建立与调用
实验六 存储过程建立与调用 一.实验目的 理解存储过程的概念.建立和调用方法. 二.实验环境 三.实验示例 1.定义一个函数,按性别计算所有学生的平均年龄. CREATE FUNCTION aver ...
- 使用ABAP Push Channel(APC)开发的乒乓球游戏,可双打
url: https://:/sap/bc/apc_test/ping_pong/game 或者事务码SICF, 输入ping_pong, 按F8: 选中搜索结果,点右键选择Test,即可打开url. ...
- IOS笔记 : 一些小技巧
计算单元格高度,在自定义cell中 -(void) resizeTheHeight{ CGFloat contentWidth = 280; UIFont *font = [UIFont fontWi ...
- 使用selenium 检测js报错
背景:接到一个需求,想检测页面是否能检测js报错,何为js报错,如下图所示,在控制台中,使用console,如果有js报错,就会出现错误 如何检测,简单版操作,打开一个url,使用manage获取浏览 ...
- 【HDU4676】Sum Of Gcd(莫队+欧拉函数)
点此看题面 大致题意: 多组询问,求\(\sum_{i=L}^R\sum_{j=i+1}^Rgcd(i,j)\). 推式子 这道题我们可以考虑,每个因数\(d\)被统计答案的次数,肯定与其出现次数有关 ...
- 原生Servlet 上传文件
依赖jar <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons ...
- Oracle 将 A 用户下所有表的增删改查 赋予 B 用户
第一步:创建用户 create user username identified by password; 第二步:给用户赋值接触锁定(仅仅赋予会话权限) grant create session t ...