广搜。看了官方题解才会的.....

定义2*2的小矩阵,有三个是点,一个是星,这样的小矩阵被称为元素块。

首先把所有元素块压入队列,每次取出对头,检查是否还是元素块,如果是 那么将那个*改为点,否则跳过

改完之后,检查周围8个点是否是元素块,如果有新产生的元素块,那么压入队列。

这样操作完之后就是答案。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<vector>
  5. #include<queue>
  6. #include<algorithm>
  7. using namespace std;
  8.  
  9. struct Node
  10. {
  11. int a,b;
  12. Node(int A,int B){a=A,b=B;}
  13. };
  14. queue<Node>Q;
  15. const int N=;
  16. int n, m;
  17. char g[N][N];
  18.  
  19. bool check(int x, int y)
  20. {
  21. if (g[x][y] == '.' || x < || y < || x >= n || y >= m)return ;
  22. if (g[x][y - ] == '.'&&g[x - ][y - ] == '.'&&g[x - ][y] == '.')return ;
  23. if (g[x - ][y] == '.'&&g[x - ][y + ] == '.'&&g[x][y + ] == '.')return ;
  24. if (g[x][y + ] == '.'&&g[x + ][y + ] == '.'&&g[x + ][y] == '.')return ;
  25. if (g[x][y - ] == '.'&&g[x + ][y - ] == '.'&&g[x + ][y] == '.')return ;
  26. return ;
  27. }
  28.  
  29. void bfs()
  30. {
  31. for(int i=;i<n;i++)
  32. for(int j=;j<m;j++) if(check(i,j)) Q.push(Node(i,j));
  33.  
  34. while(!Q.empty())
  35. {
  36. Node h=Q.front(); Q.pop();
  37. if(!check(h.a,h.b)) continue;
  38. g[h.a][h.b]='.';
  39.  
  40. for(int i=-;i<=;i++)
  41. {
  42. for(int j=-;j<=;j++)
  43. {
  44. if(i==&&j==) continue;
  45. if(check(h.a+i,h.b+j)) Q.push(Node(h.a+i,h.b+j));
  46. }
  47. }
  48. }
  49. }
  50.  
  51. int main()
  52. {
  53. while (~scanf("%d%d", &n, &m))
  54. {
  55. for (int i = ; i < n; i++) scanf("%s", g[i]);
  56. bfs();
  57. for(int i=;i<n;i++) printf("%s\n",g[i]);
  58. }
  59. return ;
  60. }

CodeForces 525D Arthur and Walls的更多相关文章

  1. Codeforces Round #297 (Div. 2) 525D Arthur and Walls(dfs)

    D. Arthur and Walls time limit per test 2 seconds memory limit per test 512 megabytes input standard ...

  2. codeforces D - Arthur and Walls

    这题说的是给了一个矩阵,必须让.连接起来的图形变成矩形,2000*2000的矩形,那么我们就可以知道了,只要是存在一个有点的区域应该尽量将他削为矩形,那么将这个图形进行缩放,最后我们知道只要存在一个2 ...

  3. cf 525D.Arthur and Walls

    判断2*2的正方形,是不是3个"."1个"*"然后暴力bfs就好.(这种处理也是挺神奇的2333%%题解) #include<bits/stdc++.h& ...

  4. Codeforces Round #297 (Div. 2) D. Arthur and Walls [ 思维 + bfs ]

    传送门 D. Arthur and Walls time limit per test 2 seconds memory limit per test 512 megabytes input stan ...

  5. Codeforces Round #297 (Div. 2)D. Arthur and Walls 暴力搜索

    Codeforces Round #297 (Div. 2)D. Arthur and Walls Time Limit: 2 Sec  Memory Limit: 512 MBSubmit: xxx ...

  6. BFS Codeforces Round #297 (Div. 2) D. Arthur and Walls

    题目传送门 /* 题意:问最少替换'*'为'.',使得'.'连通的都是矩形 BFS:搜索想法很奇妙,先把'.'的入队,然后对于每个'.'八个方向寻找 在2*2的方格里,若只有一个是'*',那么它一定要 ...

  7. Arthur and Walls CodeForces - 525D (bfs)

    大意: 给定格点图, 每个'.'的连通块会扩散为矩形, 求最后图案. 一开始想得是直接并查集合并然后差分, 但实际上是不对的, 这个数据就可以hack掉. 3 3 **. .** ... 正解是bfs ...

  8. [BFS,大水题] Codeforces 198B Jumping on Walls

    题目:http://codeforces.com/problemset/problem/198/B Jumping on Walls time limit per test 2 seconds mem ...

  9. Codeforces 508E Arthur and Brackets 区间dp

    Arthur and Brackets 区间dp, dp[ i ][ j ]表示第 i 个括号到第 j 个括号之间的所有括号能不能形成一个合法方案. 然后dp就完事了. #include<bit ...

随机推荐

  1. C#整理 条件语句

    条件语句主要分为if else语句和switch case语句. if else语句主要分为四种格式: 1. if(表达式) {} 2.二选一 if(表达式) {} else {} 3.多选一 if( ...

  2. Oracle数据库插入数据出错:ORA-06550

    wpf应用调用oracle的存储过程,出错“ORA-06550:参数个数或参数类型出错”,如下图: 反复检查,存储过程的参数个数和参数类型都没错,觉得非常蹊跷.最后终于解决, 原因是当参数的值为nul ...

  3. MySql 安装报错 :Last Error:Unable to update security. Access denied for user 'root'@'localhost(useing password:YES)

    在网上查了一下,其实这个问题很好解决,. try again 然后current password  mysql是默认密码为空,不要填,记住不要填就ok了

  4. UVALive - 3026 Period kmp next数组的应用

    input n 2<=n<=1000000 长度为n的字符串,只含小写字母 output Test case #cas 长度为i时的最小循环串 循环次数(>1) 若没有则不输出 做法 ...

  5. php mysql数据库 分页与搜索

    <?php/** * Created by coder meng. * User: coder meng * Date: 2016/8/29 10:27 */header("Conte ...

  6. JavaScript高级程序设计:第九章

    第九章 一.使用能力检测 能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力.能力检测的基本模式如下: if ( object.propertyInQuestion ) { //使用object ...

  7. DDE复盘流程

    开始复盘: 1 导入前面数据 重新复盘: 1.打开行情管理器 2.关闭图表 3.删除tick和1分钟图 4.关闭行情管理器 5.开启.

  8. ftp以及smb的配置

    linux下ftp服务的配置1,打开终端,cd /etc/vsftpd2   vi   vsftpd.conf3   相关的都打开说明:    anonymous_enable=YES  //允许匿名 ...

  9. properties读取的几种方法

    第一种: private static Properties prop = new Properties();     static{         try {             prop.l ...

  10. Mysql5.7 安装

    1 安装yum源 yum localinstall http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm2 参看源 vi ...