P1331 海战

题目描述

在峰会期间,武装部队得处于高度戒备。警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机。此外,巡洋船只和舰队将被派去保护海岸线。不幸的是因为种种原因,国防海军部仅有很少的几位军官能指挥大型海战。因此,他们考虑培养一些新的海军指挥官,他们选择了“海战”游戏来帮助学习。

在这个著名的游戏中,在一个方形的盘上放置了固定数量和形状的船只,每只船却不能碰到其它的船。在这个题中,我们仅考虑船是方形的,所有的船只都是由图形组成的方形。编写程序求出该棋盘上放置的船只的总数。

输入输出格式

输入格式:

输入文件头一行由用空格隔开的两个整数R和C组成,1<=R,C<=1000,这两个数分别表示游戏棋盘的行数和列数。接下来的R行每行包含C个字符,每个字符可以为“#”,也可为“.”,“#”表示船只的一部分,“.”表示水。

输出格式:

为每一个段落输出一行解。如果船的位置放得正确(即棋盘上只存在相互之间不能接触的方形,如果两个“#”号上下相邻或左右相邻却分属两艘不同的船只,则称这两艘船相互接触了)。就输出一段话“There are S ships.”,S表示船只的数量。否则输出“Bad placement.”。

输入输出样例

输入样例#1:

  1. 6 8
  2. .....#.#
  3. ##.....#
  4. ##.....#
  5. .......#
  6. #......#
  7. #..#...#
输出样例#1:

  1. There are 5 ships.
  2.  
  3. dfs
  4.  
  5. 忽略了不可行的情况,亦或许说是没读懂什么情况不可行,竟然能得70
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. #define N 1100
  7. using namespace std;
  8. char ch;
  9. bool vis[N][N];
  10. int n,m,a[N][N],ans;
  11. ]={,,-,},yy[]={-,,,};
  12. int read()
  13. {
  14. ,f=; char ch=getchar();
  15. ; ch=getchar();}
  16. +ch-'; ch=getchar();}
  17. return x*f;
  18. }
  19. void dfs(int x,int y)
  20. {
  21. ||y<||x>n||y>m||vis[x][y]) return ;
  22. vis[x][y]=true;
  23. ;i<;i++)
  24. {
  25. int fx=x+xx[i],fy=y+yy[i];
  26. if(a[fx][fy]) dfs(fx,fy);
  27. }
  28. }
  29. int main()
  30. {
  31. n=read(),m=read();
  32. ;i<=n;i++)
  33. ;j<=m;j++)
  34. {
  35. cin>>ch;
  36. ;
  37. ;
  38. }
  39. ;i<=n;i++)
  40. ;j<=m;j++)
  41. if(!vis[i][j]&&a[i][j])
  42. ans++,dfs(i,j);
  43. ) printf("Bad placement.");
  44. else printf("There are %d ships.",ans);
  45. ;
  46. }

70

先预处理判断是否是不可行的情况,我们由题意可以知道,不可行的情况为两个船挨在了一起,即存在不是矩形的一个图案的情况。我们又可以知道,在一个矩形(由4个地方组成是)若在三个地方都是#,那么就一定存在不是矩形的情况,直接输出,Bad placement.

然后在用dfs判断有几个图案

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. #define N 1100
  7. using namespace std;
  8. char ch;
  9. bool vis[N][N];
  10. int n,m,sum,a[N][N],ans;
  11. ]={,,-,},yy[]={-,,,};
  12. int read()
  13. {
  14. ,f=; char ch=getchar();
  15. ; ch=getchar();}
  16. +ch-'; ch=getchar();}
  17. return x*f;
  18. }
  19. void dfs(int x,int y)
  20. {
  21. ||y<||x>n||y>m||vis[x][y]) return ;
  22. vis[x][y]=true;
  23. ;i<;i++)
  24. {
  25. int fx=x+xx[i],fy=y+yy[i];
  26. if(a[fx][fy]) dfs(fx,fy);
  27. }
  28. }
  29. int main()
  30. {
  31. n=read(),m=read();
  32. ;i<=n;i++)
  33. ;j<=m;j++)
  34. {
  35. cin>>ch;
  36. ;
  37. ;
  38. }
  39. ;i<=n;i++)
  40. {
  41. ;j<=m;j++)
  42. {
  43. sum=;
  44. if(a[i][j]) sum++;
  45. ][j]) sum++;
  46. ]) sum++;
  47. ][j+]) sum++;
  48. )
  49. {
  50. printf("Bad placement.");
  51. ;
  52. }
  53. }
  54. }
  55. ;i<=n;i++)
  56. ;j<=m;j++)
  57. if(!vis[i][j]&&a[i][j])
  58. ans++,dfs(i,j);
  59. printf("There are %d ships.",ans);
  60. ;
  61. }
  1.  

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

  1. 洛谷P1331海战

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

  2. 洛谷P1331 海战

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

  3. 洛谷 P1331 海战

    传送门 题解:由于船是方形的,所以比较简单.但是考试的时候跪了,orz.忘了考虑类似一圈井号中间有一摊水.          可以只考虑这个点上方和左边点的情况,这样分为四种情况.一种是左边是一滩水, ...

  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. 【Arduino开发板刷Bootloader01】

    其接线方式就是:   Programmer(工具开发板)                Being programmed(目标开发板)                              Vcc ...

  2. 使用Github第二节

    接着第一节我们注册完账号接下来我们要创建仓库 注:如果邮箱没收到邮件需要设置域名白名单! 1.设置QQ邮箱白名单 (1)打开QQ邮箱.点击[设置] (2)点击[反垃圾] (3)点击[设置域名白名单] ...

  3. python中的内建函数

    本文用作记录python中的内建函数及其功能,本文内容随时补充. 完整的内建函数及其说明参考官方文档:    https://docs.python.org/3.5/library/functions ...

  4. perl-tips-1

    .pm 应该保存 Perl Module,也就是 Perl 模块.例如 Socket.pm.pl 应该保存 Perl Library,也就是 Perl 库文件.例如 perldb.pl.plx 应该保 ...

  5. LeetCode(279)Perfect Squares

    题目 Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9 ...

  6. zoj 4054

    #define ll long long ; int t; ll ans,tmp; char s[N]; int main() { scanf("%d",&t); whil ...

  7. SVN 删除所有目录下的“.svn”文件夹,让文件夹脱离SVN控制

    SVN 删除所有目录下的“.svn”文件夹,将如下语句拷备到记事本,并保存为 *.reg,双击导入注册表,在文件夹右键中就多了一条“Delete SVN Folders”,点击就可以删处此目录下的所有 ...

  8. 微信小程序开发 -- 点击右上角实现转发功能

    // 在page的js文件中加入以下代码/** * 用户点击右上角分享 */ onShareAppMessage: function () { }

  9. linux 下java jar包的方法

      test.java 和 example.jar 在同一目录:并且test.java引用了example.jar 首先编译test.java: javac -cp example.jar test. ...

  10. 解决MySQL版本之间造成的乱码、数据查询不出的问题

    在数据库连接字符串上加  charset=utf8 <connectionStrings> <add name="XJRDSModels" connectionS ...