1402 星空之夜

2021-10-18 07:47:34 字數 2712 閱讀 5787

原題鏈結

夜空深處,閃亮的星星以星群的形式出現在人們眼中,形態萬千。

乙個星群是指一組非空的在水平,垂直或對角線方向相鄰的星星的集合。

乙個星群不能是乙個更大星群的一部分。

星群可能是相似的。

如果兩個星群的形狀、包含星星的數目相同,那麼無論它們的朝向如何,都認為它們是相似的。

通常星群可能有 8 種朝向,如下圖所示:

starry-1.gif

現在,我們用乙個二維 01 矩陣來表示夜空,如果乙個位置上的數字是 1,那麼說明這個位置上有乙個星星,否則這個位置上的數字應該是 0。

給定乙個夜空二維矩陣,請你將其中的所有星群用小寫字母進行標記,標記時相似星群用同一字母,不相似星群用不同字母。

標註星群就是指將星群中所有的 1 替換為小寫字母。

輸入格式

第一行包含乙個整數 w,表示矩陣寬度。

第二行包含乙個整數 h,表示矩陣高度。

接下來 h 行,每行包含乙個長度為 w 的 01 序列,用來描述整個夜空矩陣。

輸出格式

輸出標記完所有星群後的二維矩陣。

用小寫字母標記星群的方法很多,我們將整個輸出讀取為乙個字串,能夠使得這個字串字典序最小的標記方式,就是我們想要的標記方式。

輸出這個標記方式標出的最終二維矩陣。

資料範圍

0≤w,h≤100,

0≤ 星群數量 ≤500,

0≤ 不相似星群數量 ≤26,

1≤ 星群中星星的數量 ≤160

輸入樣例:

23

1510001000000000010000000

01111100011111000101101

01000000010001000111111

00000000010101000101111

00000111010001000000000

00001001011111000000000

10000001000000000000000

00101000000111110010000

00001000000100010011111

00000001110101010100010

00000100110100010000000

00010001110111110000000

00100001110000000100000

00001000100001000100101

00000001110001000111000

輸出樣例:
a000a0000000000b0000000

0aaaaa000ccccc000d0dd0d

0a0000000c000c000dddddd

000000000c0b0c000d0dddd

00000eee0c000c000000000

0000e00e0ccccc000000000

b000000e000000000000000

00b0f000000ccccc00a0000

0000f

000000c000c00aaaaa

0000000ddd0c0b0c0a000a0

00000b00dd0c000c0000000

000g000ddd0ccccc0000000

00g0000ddd0000000e00000

0000b000d0000f000e00e0b

0000000ddd000f000eee000

本題是乙個深搜題,主要是儲存以前出現過的星群並判斷當前星群是否出現過

那麼需要乙個陣列記錄一下出現過的星群,如果後面出現的星群沒有出現過,就用乙個新的字元表示(這邊用+size)就可以了

如果有就用出現過的星群對應的字元即可

#include

#include

#include

using

namespace std;

#define xx first

#define yy second

typedef

long

long ll;

typedef pair<

int,

int> pii;

int w,h;

char g[

101]

[101];

//字元陣列讀入

int a[8]

[2]=

,,,,

,,,}

;//方向陣列

vector<

double

>nebula;

vectorcx;

void

dfs(

int x,

int y));

for(

int i=

0; i<

8; i++)}

double

dis(

)char

check

(double x)

char hh=

'a'+nebula.

size()

; nebula.

push_back

(x);

return hh;

}void

fill

(char c)

intmain()

}for

(int i=

0; i)}

Acwing 1402 星空之夜

這題思路很好看,但實現卻很難,用到了歐幾里得距離來代表乙個星群的形狀,對乙個星群,任意兩點 從這些可以組成星群的點中抽取兩個點 相當於集合 之間的距離之和 就好比有1 2 3 4 5五個點 找1 2 1 3 1 4 1 5 2 3 2 4 2 5 3 4 3 5 4 5的距離之和。g代表乙個形狀對應...

Acwing 1402 星空之夜(搜尋 雜湊)

題目大意 給定乙個長為 n nn 寬為 m mm 的 01 0101 矩陣,1 11 代表連通 連通形式為 8 88 連通 將每乙個聯通塊標上相同的字母,形態相似 通過對稱旋轉可轉換成同一種形式 的連通塊字母也要相同,輸出標記後的矩陣 題目分析 求連通塊可以使用 flo odfi ll flood ...

明星空降TOM FORD直播之夜,場觀創直播新高

說到湯姆 福特 以下簡稱tf 不得不提起tf口紅,大多人知道它是口紅界的愛馬仕,在女性消費群體,口紅成了tf的標誌象徵,這個成立於2005年的奢侈品牌,除了美妝之外,經營範圍還包括 美妝 眼鏡 配飾。來自網路 01.tom ford 星 路歷程 品牌的創始人tom ford,起初在gucci品牌上班...