《演算法競賽高階指南》 雪花雪花雪花

2021-10-08 06:34:58 字數 1890 閱讀 2480

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

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

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

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

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

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

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

輸入格式

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

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

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

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

輸出格式

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

no two snowflakes are alike.

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

twin snowflakes found.

資料範圍

1≤n≤100000,

0≤ai,j<10000000

輸入樣例:

21 2 3 4 5 6

4 3 2 1 6 5

輸出樣例:

;//得到最小位置的指標

for(i=

0;i<

6;i++

) b[i]

=a[i+k]

;//得到最小字典序的排列

}bool cmp2

(int a,

int b)

bool cmp

(int a,

int b)

intmain()

get_min

(snow)

;get_min

(isnow)

;//get_min函式用於將傳入的陣列轉換成字典序最小的陣列if(

cmp2

(snow,isnow)

)//cmp2判斷snow的字典序時候比isnow的小

memcpy

(snows[i]

,snow,

sizeof snow)

;else

memcpy

(snows[i]

,isnow,

sizeof isnow)

;

idx[i]

=i;//idx陣列儲存的是雪花的位置

}sort

(idx,idx+n,cmp)

;//將idx陣列按照雪花的字典序進行公升序排序

for(

int i=

1;iputs

("no two snowflakes are alike.");

return0;

}

雪花雪花雪花

e.雪花雪花雪花 記憶體限制 256 mib 時間限制 1000 ms 標準輸入輸出 題目型別 傳統 評測方式 文字比較 題目描述 有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙...

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

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

137 雪花雪花雪花 hash

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