Acwing 137 雪花雪花雪花

2021-09-24 02:19:49 字數 1840 閱讀 1612

有n片雪花,每片雪花由六個角組成,每個角都有長度。

第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6。

因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。

例如ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6和ai,2,ai,3,…,ai,6,ai,1ai,2,ai,3,…,ai,6,ai,1就是形狀相同的雪花。

ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6和ai,6,ai,5,…,ai,1ai,6,ai,5,…,ai,1也是形狀相同的雪花。

我們稱兩片雪花形狀相同,當且僅當它們各自從某一角開始順時針或逆時針記錄長度,能得到兩個相同的六元組。

求這n片雪花中是否存在兩片形狀相同的雪花。

輸入格式

第一行輸入乙個整數n,代表雪花的數量。

接下來n行,每行描述一片雪花。

每行包含6個整數,分別代表雪花的六個角的長度(這六個數即為從雪花的隨機乙個角順時針或逆時針記錄長度得到)。

同行數值之間,用空格隔開。

輸出格式

如果不存在兩片形狀相同的雪花,則輸出:

no two snowflakes are alike.

如果存在兩片形狀相同的雪花,則輸出:

twin snowflakes found.

資料範圍

1≤n≤100000

0≤ai,j<100000000

輸入樣例:

2

1 2 3 4 5 6

4 3 2 1 6 5

輸出樣例:

twin snowflakes found.
題解: 定義雜湊 hash 函式 h(a[i] ) = (

#include #include #include #include #define swap(a,b)  a ^= b ^= a ^= b

#define pi acos(-1)

#define cl(a,b) memset(a,b,sizeof(a))

using namespace std ;

const int max = 100010 ;

const int inf = 0x3f3f3f3f ;

int n ;

int tot ;

typedef long long ll ;

const int p = 1e9+7 ;

int snow[max][6] ;

int head[max] ;

int next[max] ;

ll h(int *a)

return (sum+mul)%p ;

}bool equal(int *a ,int *b )

}if(eq ) return 1 ;

for(int k = 0 ; k<6 ;k++ )

}if(eq) return 1 ;

} }}bool insert(int *a)

}// 沒有相同的就插入

++tot ;

memcpy(snow[tot],a,6*sizeof(int)) ;

next[tot] = head[val] ;

head[val] = tot ;

return 0 ;

}int main()

if(insert(a))

}puts("no two snowflakes are alike.") ;

return 0 ;

}

AcWing 137 雪花雪花雪花

題目描述 有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。例如ai,1,ai,2,ai,6和ai,2,ai,3...

AcWing 137 雪花雪花雪花 初探hash

題目鏈結 本題的資料範圍顯然不能把所有陣列乙個乙個對比,可以建立乙個雜湊表,不同的h x 代表不同的雜湊值,雜湊值衝突的陣列就存在同乙個h x 開頭的煉表裡,然後根據雜湊值來對比對應的字串,減少重複比較。const int maxn 1e5 10 int a 10 snow maxn 6 h max...

演算法高階指南 Acwing 137 雪花雪花雪花

有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。例如ai,1,ai,2,ai,6和ai,2,ai,3,ai,6...