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

2021-10-19 01:25:51 字數 1420 閱讀 8973

題目大意:

給定乙個長為 n

nn ,寬為 m

mm 的 01

0101

矩陣, 1

11 代表連通(連通形式為 8

88 連通),將每乙個聯通塊標上相同的字母,形態相似(通過對稱旋轉可轉換成同一種形式)的連通塊字母也要相同,輸出標記後的矩陣

題目分析:

求連通塊可以使用 flo

odfi

ll

flood\ fill

floodf

ill 的搜尋方式進行搜尋,此題的關鍵是如何通過雜湊來判斷連通塊形態相似

給出一種雜湊函式為:求連通塊內所有點的兩點距離之和

此雜湊值是乙個浮點數,但切記不可不開根號,因為距離平方和是乙個大概率會衝突的雜湊函式,而距離和衝突概率則會小很多

如果只使用此雜湊還是出現了衝突則需要引入新的雜湊來減小衝突(此題不需要)

具體細節見**:

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define inf 0x3f3f3f3f

#define inf 0x3f3f3f3f3f3f3f3f

//#define int ll

using

namespace std;

intread()

while

(ch>=

'0'&& ch<=

'9')

return res*flag;

}const

int maxn =

105;

const

int mod =

1e9+7;

const

double pi =

acos(-

1);const

double eps =

1e-8

;struct nodenod[maxn*maxn]

;int n,m,x,cnt,id=

'a';

char a[maxn]

[maxn]

;void

dfs(

int x,

int y)

}double

get_hash()

char

get_id

(double key)

signed

main()

for(

int i =

1;i <= n;i++

)puts

(a[i]+1

);return0;

}

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代表乙個形狀對應...

1402 星空之夜

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

資料結構之單鏈表,實現浪漫星空

開發工具 vs2019 圖形庫 easyx 2019 pragma once include include include define max star 100 最大星星數 define screen width 720 螢幕寬度 define screen hight 480 螢幕高度 def...