传送门

题解:由于船是方形的,所以比较简单。但是考试的时候跪了,orz。忘了考虑类似一圈井号中间有一摊水。

         可以只考虑这个点上方和左边点的情况,这样分为四种情况。一种是左边是一滩水,上面是船,那么这个点与上面的点构成船。另一种正好相反。第三种是左边和上面都是水,那么它自己先构成船。第四种是左边和上面都是船,但是不是同一条船。这时船相邻。那么这样子考虑的话,一定会有不满足方形的船出现。因此在搜到一滩水的时候,判断它的上方和左边有没有船,如果都有船,且不是同一条,则有船相邻。

#include<cstdio>
#include<iostream>
#include<cstring>
#define N 1100
using namespace std;
char a[N][N];
int f[N][N]={};
int r,c,sum=;
int main()
{
scanf("%d%d",&r,&c);
for (int i=;i<=r;i++)
for (int j=;j<=c;j++)
cin>>a[i][j];
for (int i=;i<=r;i++)
for (int j=;j<=c;j++)
{
if (a[i][j]=='.') f[i][j]=;
if (a[i][j]=='#')
{
int x=f[i-][j],y=f[i][j-];
if (x!=&&y!=&&x!=y)
{
cout<<"Bad placement."<<endl;
return ;
}
else if (x==&&y!=) f[i][j]=y;
else if (x!=&&y==) f[i][j]=x;
else if (x==&&y==) f[i][j]=++sum;
} }
printf("There are %d ships.\n",sum);
return ; }

蠢蛋的60分代码

#include<cstdio>
#include<iostream>
#include<cstring>
#define N 1100
using namespace std;
char a[N][N];
int f[N][N]={};
int r,c,sum=;
int main()
{
scanf("%d%d",&r,&c);
for (int i=;i<=r;i++)
for (int j=;j<=c;j++)
cin>>a[i][j];
for (int i=;i<=r;i++)
for (int j=;j<=c;j++)
{
int x=f[i-][j],y=f[i][j-];
if (a[i][j]=='.')
{
if (x==y&&x!=)
{
cout<<"Bad placement."<<endl;
return ;
}
f[i][j]=;
}
if (a[i][j]=='#')
{ if (x!=&&y!=&&x!=y)
{
cout<<"Bad placement."<<endl;
return ;
}
else if (x==&&y!=) f[i][j]=y;
else if (x!=&&y==) f[i][j]=x;
else if (x==&&y==) f[i][j]=++sum;
else if (x==y) f[i][j]=x;
} }
printf("There are %d ships.\n",sum);
return ; }

改后满分代码

洛谷 P1331 海战的更多相关文章

  1. 洛谷P1331海战

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线. 不幸的是因为种种原因,国防海军部仅有很少的 ...

  2. 洛谷——P1331 海战

    P1331 海战 题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防 ...

  3. 洛谷P1331 海战

    海战 题目链接 这还是一道联通块的题,只是需要判断是否存在以下四种情况: o. .o oo oo oo oo o. .o 如果存在就是Bad placement. 要注意标记以下,不然会出现多次输出B ...

  4. 洛谷P1331 海战 题解

    题目传送门 思路 肯定食用dfs啦... 但关键是两条船接触了怎么判断呢?? 上图: 可以发现一下规律 当两条船接触时,必有一条直线连续穿过两条船 当一条船不与另一条船接触时,没有一条直线连续穿过两条 ...

  5. 海战(洛谷 P1331)

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...

  6. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  7. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  8. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

随机推荐

  1. HTML embed标签使用方法和属性详解

    一.基本语法   代码如下:   embed src=url   说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,Netscape及新版的IE 都支持 ...

  2. jEdit应用指南【基础篇】

    jEdit是Java编写,强大,易用的程序员文本编辑器 jEdit是一个成熟的,设计优秀的程序员文本编辑器,已经有了7年的开发历史.在功能和易用性方面压倒许多昂贵的开发工具时,jEdit在GNU公用许 ...

  3. Android用户界面概览

    用户界面的概观           全部的Android应用程序的用户界面元素都是用View和ViewGroup对象构建的.View就是在手机屏幕上描绘一个能够与用户交互的一个对象.ViewGroup ...

  4. 1031. Hello World for U (20)

    题目链接:http://www.patest.cn/contests/pat-a-practise/1031 题目: 分析: 排版题.注意先计算好最后一排的字符数,然后计算前面几排的空格数.难度不大 ...

  5. Python学习之四【变量】

    变量:用于引用(绑定)对象的标识符 语法: >>变量名=对象 (数值,表达式等) 如计算圆的面积 PI=3.14 redius:12.3 area=PI*radius**2(**在pyth ...

  6. Creating a simple static file server with Rewrite--reference

    Today, I’d like to take a quick moment to demonstrate how to make a simple file server using Rewrite ...

  7. C#泛型类的简单创建与使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  8. 怎样找Android里自带的数据库?

    首先先让它显示出来. 窗口window下的Show View 下的File Explorer(other里), 这时File Explorer窗口 就会显示出来,下一步我们找到data下的data,然 ...

  9. 使用ajax与服务器通信的步骤

    使用ajax与服务器通信的步骤: 1. 创建一个XMLHttpRequest对象 2. 创建url,data,通过xmlHttpRequest.send() 3. 服务器端接收ajxa的请求,做相应处 ...

  10. (转)PHP数组的总结(很全面啊)

    一.什么是数组数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体.数组的每个实体都包含两项:键和值. 二.声明数据在PHP中声明数组的方式主要有两种:一是应用array()函数声明数组 ...