hihoCoder1495 矩形分割(搜索+拆点)
2017-04-02 15:17
232 查看
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
小Hi有一块由NxM个单位正方形组成的矩形。现在小Ho在某些单位正方形上画了一道分割线,这条分割线或者是单位正方形的主对角线(用'\'表示),或者是副对角线(用'/'表示)。
现在小Hi想知道这些分割线把NxM的矩形分割成了多少块区域。
例如
就把2x2的矩形分成了5个区域。
把3x4的矩形分成了7个区域。
第一包含两个整数N和M。(1 <= N, M <= 100)
以下N行每行包含M个字符。每个字符只可能是/\或者空格。
分割成的区域数目。
样例输入
样例输出
解题思路:
首先看到这题,第一反应就和搜索的入门题很像,不过,由于这个输入的单符号信息量很大,不好空位。于是我们就可把每个字符的位置拆成一个3*3个小矩阵(表示成2*2的矩阵会在有相邻的平行的线时出问题),然后就可以很好的表示空位了,然后再dfs即可。
AC代码:
单点时限:1000ms
内存限制:256MB
描述
小Hi有一块由NxM个单位正方形组成的矩形。现在小Ho在某些单位正方形上画了一道分割线,这条分割线或者是单位正方形的主对角线(用'\'表示),或者是副对角线(用'/'表示)。现在小Hi想知道这些分割线把NxM的矩形分割成了多少块区域。
例如
/\ \/
就把2x2的矩形分成了5个区域。
/\/\ \ / \/\
把3x4的矩形分成了7个区域。
输入
第一包含两个整数N和M。(1 <= N, M <= 100)以下N行每行包含M个字符。每个字符只可能是/\或者空格。
输出
分割成的区域数目。样例输入
3 4 /\/\ \ / \/\
样例输出
7
解题思路:
首先看到这题,第一反应就和搜索的入门题很像,不过,由于这个输入的单符号信息量很大,不好空位。于是我们就可把每个字符的位置拆成一个3*3个小矩阵(表示成2*2的矩阵会在有相邻的平行的线时出问题),然后就可以很好的表示空位了,然后再dfs即可。
AC代码:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <vector> #include <queue> #include <cmath> #include <cstdlib> #include <string> #include <map> #include <stack> using namespace std; #define INF 0x3f3f3f3f #define LL long long #define fi first #define se second #define mem(a,b) memset((a),(b),sizeof(a)) const int MAXN=100+2; const int MAXL=MAXN*3; const int dy[]={-1,0,1,0},dx[]={0,1,0,-1}; int N,M; bool maze[MAXL][MAXL]; inline bool in(int y,int x) { return y>=0&&y<3*N&&x>=0&&x<3*M; } void dfs(int y,int x) { for(int i=0;i<4;++i) { int ny=y+dy[i],nx=x+dx[i]; if(in(ny,nx)&&!maze[ny][nx]) { maze[ny][nx]=true; dfs(ny,nx); } } } int main() { while(~scanf("%d %d",&N,&M)) { getchar(); mem(maze,0); for(int i=0;i<N;++i) { char s[MAXN]; gets(s); for(int j=0;j<M;++j)//拆点 { if(s[j]=='\\') maze[i*3][j*3]=maze[i*3+1][j*3+1]=maze[i*3+2][j*3+2]=true; if(s[j]=='/') maze[i*3][j*3+2]=maze[i*3+1][j*3+1]=maze[i*3+2][j*3]=true; } } int ans=0; for(int i=0;i<N*3;++i) for(int j=0;j<M*3;++j) if(!maze[i][j]) { ++ans; maze[i][j]=true; dfs(i,j); } printf("%d\n",ans); } return 0; }
相关文章推荐
- hihocoder [Offer收割]编程练习赛12 [1495] ---- 矩形分割
- hnu12884 Area Coverage 矩形分割 or 线段树
- hihoCoder搜索二·骑士问题
- hihocoder1040 矩形判断
- COGS 498 TYVJ 1094 矩形分割 贪心
- 【tyvj1094】矩形分割 贪心
- 【DP】 POJ 1191 棋盘分割 记忆化搜索
- [kuangbin带你飞]专题一 简单搜索 M - 非常可乐 HDU 1495
- hihoCoder搜索专题1---24点
- HDU 1495 非常可乐 BFS 搜索
- [贪心] 矩形分割
- TYVJ 1094 矩形分割
- sgu177:Square(矩形分割)
- leetcode41First Missing Positive & hihocoder1040矩形判断(C++)
- 牛牛和15朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成26份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地,作为牛牛最好的朋友,你希望牛牛取得的田地价值和尽可能大,你知道这个值最大可以是多少吗? 输入两个整数n和m(1≤n,m≤75)表示田地的大小,接下来n行,每行包括m个0-9之间的数字,表示每块
- hihocoder 二分图判定 简单搜索和超快板子
- 【DP】 POJ 1191 棋盘分割 记忆化搜索
- hihocoder 1040 矩形判断解题报告
- USACO / Shaping Regions (矩形分割)
- 【TYVJ】1094 矩形分割