codeforces D - Arthur and Walls
2015-03-29 11:39
351 查看
这题说的是给了一个矩阵,必须让.连接起来的图形变成矩形,2000*2000的矩形,那么我们就可以知道了,只要是存在一个有点的区域应该尽量将他削为矩形,那么将这个图形进行缩放,最后我们知道只要存在一个2*2 的矩形中有1个是*就必须将这个*号去掉。 采用bfs去做
#include <iostream> #include <algorithm> #include <string.h> #include <cstdio> #include <queue> using namespace std; const int maxn = 2005; char ma[maxn][maxn]; int num[maxn][maxn]; bool inq[maxn*maxn]; int tx[]={ 0,-1, -1, -1, 0, 1, 1, 1 ,0}; int ty[]={ -1,-1, 0, 1, 1, 1, 0,-1 , -1}; int main() { int n,m; while(scanf("%d%d",&n,&m)==2){ queue<int>Q; for(int i=0; i<n; i++){ scanf("%s",ma[i]); for(int j=0; j<m; j++) if(ma[i][j]=='.') { Q.push(i*m+j); } } while(!Q.empty()){ int id = Q.front(); Q.pop(); int xx = id/m, yy=id%m; for(int i =0; i<8; i+=2){ int sum=0,loc=-1; for(int j=i; j<i+3; j++){ int dx = xx + tx[j]; int dy = yy + ty[j]; if(dx<0||dx>=n ||dy>=m||dy<0) sum=4; if(ma[dx][dy]=='*') sum++,loc=dx*m+dy; if(sum>1)break; } if(sum==1){ ma[loc/m][loc%m]='.'; Q.push(loc); } } } for(int i=0; i<n; i++) printf("%s\n",ma[i]); } return 0; }
相关文章推荐
- Codeforces--525D--Arthur and Walls(DFS)
- 【CodeForces 525D】【dfs+思维】 Arthur and Walls 【只包含点和星的矩阵,需要将部分星变成点使点能组成矩形 】
- CodeForces 525D D. Arthur and Walls(BFS)
- codeforces 525 D Arthur and Walls
- Arthur and Walls - CodeForces 525 D 搜索
- Problem - 557C - Codeforces - Arthur and Table
- Codeforces Round #297 (Div. 2) D. Arthur and Walls
- codefrces 525 D. Arthur and Walls (bfs-小矩形)
- codeforces 311(div2)C-Arthur and Table
- codeforces288 E. Arthur and Brackets
- Arthur and Questions - CodeForces 518 E
- Codeforces Round #297 (Div. 2) D - Arthur and Walls [思维]【思维】
- Codeforces Round #297 (Div. 2)D. Arthur and Walls 暴力搜索
- Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs
- codeforces 508 E. Arthur and Brackets
- Codeforces Round #297 (Div. 2) D - Arthur and Walls
- 【Henu ACM Round#18 F】Arthur and Walls
- Codeforces #297( div2) D. Arthur and Walls ( DFS
- 【35.29%】【codeforces 557C】Arthur and Table
- #297 (div.2) D. Arthur and Walls