#搜索#CF525D Arthur and Walls
题目
给出一个\(n*m\)的矩阵,里面有“”和“.”两种符号,要求把最少的“”变成“.”,
使得“.”的联通块构成一个矩形。求最少需要变几个“*”。
分析
只要22的矩阵中只有一个“”就必须把它改成“.”,这样搜索就可以了
代码
#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int dx[8]={0,0,1,1,1,-1,-1,-1};
const int dy[8]={1,-1,0,-1,1,0,-1,1};
const int N=2011; int n,m; bool a[N][N];
inline bool check(int x,int y){
if (!a[x][y]) return 0;
if (x>1&&y>1&&!(a[x-1][y]|a[x][y-1]|a[x-1][y-1])) return 1;
if (x>1&&y<m&&!(a[x-1][y]|a[x][y+1]|a[x-1][y+1])) return 1;
if (x<n&&y>1&&!(a[x+1][y]|a[x][y-1]|a[x+1][y-1])) return 1;
if (x<n&&y<m&&!(a[x+1][y]|a[x][y+1]|a[x+1][y+1])) return 1;
return 0;
}
inline void dfs(int x,int y){
a[x][y]=0;
for (rr int k=0;k<8;++k){
rr int zx=x+dx[k],zy=y+dy[k];
if (zx<1||zx>n||zy<1||zy>m||!check(zx,zy)) continue;
dfs(zx,zy);
}
}
signed main(){
scanf("%d%d",&n,&m);
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=m;++j){
rr char c=getchar();
while (c!='*'&&c!='.') c=getchar();
a[i][j]=(c=='*');
}
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=m;++j)
if (check(i,j)) dfs(i,j);
for (rr int i=1;i<=n;++i,putchar(10))
for (rr int j=1;j<=m;++j)
putchar(a[i][j]?'*':'.');
return 0;
}
#搜索#CF525D Arthur and Walls的更多相关文章
- 题解 [CF525D] Arthur and Walls
题面 解析 首先考虑将一个\('*'\)变成\('.'\)后会形成什么, 显然至少是一个\(2\times 2\)的矩形. 因为\(1\times 1\)和\(1\times 2\)的改了没用啊, 而 ...
- 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 ...
- BFS Codeforces Round #297 (Div. 2) D. Arthur and Walls
题目传送门 /* 题意:问最少替换'*'为'.',使得'.'连通的都是矩形 BFS:搜索想法很奇妙,先把'.'的入队,然后对于每个'.'八个方向寻找 在2*2的方格里,若只有一个是'*',那么它一定要 ...
- 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 ...
- 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 ...
- 「CF525D」Arthur and Walls
题目链接 戳我 \(Solution\) 如果一个#要更改,那么一个四个格子的正方形只有他一个是#,bfs弄一下就好了 \(Code\) #include<bits/stdc++.h> u ...
- CodeForces 525D Arthur and Walls
广搜.看了官方题解才会的..... 定义2*2的小矩阵,有三个是点,一个是星,这样的小矩阵被称为元素块. 首先把所有元素块压入队列,每次取出对头,检查是否还是元素块,如果是 那么将那个*改为点,否则跳 ...
- Arthur and Walls CodeForces - 525D (bfs)
大意: 给定格点图, 每个'.'的连通块会扩散为矩形, 求最后图案. 一开始想得是直接并查集合并然后差分, 但实际上是不对的, 这个数据就可以hack掉. 3 3 **. .** ... 正解是bfs ...
- codeforces D - Arthur and Walls
这题说的是给了一个矩阵,必须让.连接起来的图形变成矩形,2000*2000的矩形,那么我们就可以知道了,只要是存在一个有点的区域应该尽量将他削为矩形,那么将这个图形进行缩放,最后我们知道只要存在一个2 ...
- 【Henu ACM Round#18 F】Arthur and Walls
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑,为什么一个连通块里面的空格没有变成一个矩形? 如果不是形成矩形的话. 肯定是因为某个2x2的单张方形里面. 只有一个角是墙.其 ...
随机推荐
- Generating equals/hashCode implementation but without a call to superclass
Generating equals/hashCode implementation but without a call to superclass1.lombok 警告,没有注入父类的字段当我们给一 ...
- django中使用celery异步发送邮件
申请163网易发送邮件权限 在django中settings配置文件 #配置邮件服务器 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBac ...
- 【Azure 应用服务】Web.config中设置域名访问限制,IP地址限制访问特定的页面资源 (Rewrite)
问题描述 问题一:web app已经绑定了域名,例如是www.a.com,现在只允许使用www.a.com 访问,如果使用默认的域名xxxx.chinacloundsites.cn访问的时候,需要显示 ...
- Java 一悟结束异常处理 Biu丶
- Java //9*9乘法表 乘法口诀
1 //9*9乘法表 2 3 for(int i =1;i<10;i++) 4 { 5 for(int j = 1;j <=i;j++) 6 { 7 System.out.print(i+ ...
- XAF新手入门 - XAF设计模式探讨
前言 刚接触XAF的小伙伴可能会有一个疑惑,XAF中有Model(BusinessObject).View.Controller,感觉明显是一个MVC的设计模式,但当你用MVC的设计模式与其对应时,又 ...
- 一文搞定POI,再也不怕excel导入导出了
写在前面 在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求. 通过使用相关的Java库,如Apache POI.EasyPoi或EasyExcel,可以轻松地实现Excel文 ...
- Nginx安装nginx-rtmp-module模块
简介 nginx中的模块虽然就是类似插件的概念,但是它无法像VsCode那样轻松的安装扩展. nginx要安装其它模块必须同时拿到nginx源代码和模块源代码,然后手动编译,将模块打到nginx中,最 ...
- vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/
vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/ vite dev开发启动的时候, url最后不加/,系统不能使用,所以代理的时候,没加/,代理跳转过去,就回导致页面加载不出来,j ...
- 已安装docker-compose,安装harbor时还是提示docker-compose未安装或者Permission denied的解决方案
安装Harbor时,下载安装了docker-compose并赋予权限 sudo curl -L "https://github.com/docker/compose/releases/dow ...