uva 201 Squares(數正方形)

2021-08-16 02:16:06 字數 1685 閱讀 3506

習題4-2 正方形(squares, acm/icpc world finals 1990, uva201)

有n行n列(2≤n≤9)的小黑點,還有m條線段連線其中的一些黑點。統計這些線段連成

了多少個正方形(每種邊長分別統計)。

行從上到下編號為1~n,列從左到右編號為1~n。邊用h i j和v i j表示,分別代表邊

(i,j)-(i,j+1)和(i,j)-(i+1,j)。如圖4-5所示最左邊的線段用v 1 1表示。圖中包含兩個邊長為1的正

方形和乙個邊長為2的正方形。

sample input

4 16

h 1 1

h 1 3

h 2 1

h 2 2

h 2 3

h 3 2

h 4 2

h 4 3

v 1 1

v 2 1

v 2 2

v 2 3

v 3 2

v 4 1

v 4 2

v 4 3

2 3

h 1 1

h 2 1

v 2 1

sample output

problem #1

2 square (s) of size 1

1 square (s) of size 2

problem #2

no completed squares can be found.

(注意最後一次輸出後面沒有空行)

思路:

先看輸入的資料:

h輸入的是行列的點往連的一條邊

v輸入的是列行的點往連的一條邊

1、我們先用兩個二維陣列記錄下輸入的點的座標,乙個h(水平),乙個v(垂直)。比如右邊的點就記為1。

2、寫個函式,傳進引數為查詢的方塊的邊長。

3、然後從第乙個點開始遍歷。判斷以這個點作為左上頂點的正方形,的四條邊是不是存在,即標誌四條邊的點的值是不是1。

4、關於大於1的邊長來說,我們可以在判斷時用個迴圈,每次迴圈判斷的是邊長中的一部分(乙個單位長度)的邊是不是存在。即可。

5、具體看**吧。

#include

#include

using

namespace

std;

int hor[10][10],ver[10][10];

int n;

int square(int sq_n)

if(iff)

sqnum++;//方塊的個數}}

return sqnum;

}int main()

int num;

int ifn=0;

for(int i=1;i<=n;i++)

//ac at 2018/3/4

(題外話:到校第一道題還算順利。祝福接下來的旅程吧。演算法真害人。)

UVA 201,紫書此處有錯

這個題資料小,所以我們暴力可解,思路是這樣的 heng i j 一旦是 1 就意味著,在 i,j 這個點出發有個 向右的線。zhi 同理,向下的線。然後列舉所有邊的情況,一旦judge 函式在某個點,找到了某個 以 len 為邊的 完整的方形 len,x,y 就返回1 1 include2 usin...

第三十五題 UVA201 正方形 Squares

pdf 題目描述 乙個兒童棋盤遊戲,包含了由點組成的正方形矩陣,由線段連線了一些相鄰的點。遊戲的乙個環節是,要求玩家數出由這些線段所形成的特定大小的正方形有多少個。例如,按下圖所示,有 3 個正方形,其中大小為 1 的有 2 個,大小為 2 的有 1 個。正方形的 大小 是指構成它的一條邊的線段數。...

uva 1451 Average 數形結合

數形結合那篇 的例題,維護乙個下凸佇列,一開始為了省事,用了棧,但是原理上有問題,因為有可能正好起點為上凸點的情況,wa了好多次 author jxy lang c c university china,xidian university if you need to reprint,please ...