原題鏈結
夜空深處,閃亮的星星以星群的形式出現在人們眼中,形態萬千。
乙個星群是指一組非空的在水平,垂直或對角線方向相鄰的星星的集合。
乙個星群不能是乙個更大星群的一部分。
星群可能是相似的。
如果兩個星群的形狀、包含星星的數目相同,那麼無論它們的朝向如何,都認為它們是相似的。
通常星群可能有 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品牌上班...