hihoCoder1495 矩形分割(搜尋 拆點)

2021-07-29 22:48:04 字數 1317 閱讀 1131

時間限制:

10000ms

單點時限:

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 #include #include #include #include #include #include #include #include #include #include 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=,dx=;

int n,m;

bool maze[maxl][maxl];

inline bool in(int y,int x)

void dfs(int y,int x)

}}int main()

{ while(~scanf("%d %d",&n,&m))

{getchar();

mem(maze,0);

for(int i=0;i

hihoCoder 1040 矩形判斷

描述 給出平面上4條線段,判斷這4條線段是否恰好圍成乙個面積大於0的矩形。輸入 輸入第一行是乙個整數t 1 t 100 代表測試資料的數量。每組資料報含4行,每行包含4個整數x1,y1,x2,y2 0 x1,y1,x2,y2 100000 其中 x1,y1 x2,y2 代表一條線段的兩個端點。輸出 ...

hihocoder 1476 矩形計數

顯然就是容斥原理了。先算出所有的矩陣一共有多少個 ll sum n n 1 2 m m 1 2 然後考慮對於任取x個黑色方框,他們組成乙個新的矩形,然後計算有多少個矩陣會覆蓋整個矩形,也即,兩條邊所夾住的對頂兩個小正方形的所有點的乘積 奇減偶加即可 include using namespace s...

hihoCoder1040 矩形判斷

大體思路是可以出來的,就是先判斷能否組成四邊形,然後再判斷能否組成矩形。四邊形這部分比較難搞,但是我們有st l 啊,直接自定義乙個小於號,然後把所有的點扔進se t 最後看下si ze是不是等於 4 就好了。好,我們已經知道了這是乙個四邊形,再怎麼判斷它是否是矩形?思來想去啊,似乎計算幾何中沒有簡...