今天的資料結構課程剛結束,波路特石剛學會什麼是哈希 (hashing) 函數,哈希函數可以將資料對應到固定大小為 $n$ 的記憶體內。作為一個初學者,波路特石選擇最簡單的函數 $h(x) = x \bmod{n}$
很不幸的,這個函數並不夠好,舉例來說,若 $n = 7$,那麼 $10$ 和 $24$ 會對應到同一個值,因為 $h(10) = h(24) = 3$。在這種情況下,為了避免不同資料被放入同一塊記憶體當中,如果 $h(x) \bmod{n}$ 已經有資料儲存了,波路特石就會檢查下一個位置 $(h(x) + 1) \bmod{n}$ 是不是空著,如果是就將資料儲存在該格,若否則繼續往下檢查,直到找到第一個空著的位置。
當波路特石完成了這個任務以後,他又對哈希函數有了更進一步的認識,因此他想要知道,給定哈希表最後的樣子,他是不是能還原出初始的插入順序。因為可能有很多種不同的插入順序符合條件,請幫波路特石找出字典序最小的插入順序。
輸入第一行僅包含一個整數 $n$,代表哈希表的大小。
輸入第二行有 $n$ 個整數 $a_0, a_1, \ldots, a_{n - 1}$,$a_i$ 代表哈希表上第 $i$ 個位置儲存的數值,若 $a_i = -1$,則代表第 $i$ 格是空著的。
請輸出最小字典序的合法插入順序,如果沒有合法的插入順序,請輸出 -1。
我們說數列 $a_1, a_2, \ldots, a_n$ 的字典序小於 $b_1, b_2, \ldots, b_n$ 如果存在整數 $1 \leq i \leq n$ 滿足 $a_i < b_i$,且 $a_j = b_j, \forall 1 \leq j <i$。
IOICamp 2021 Day3 pE
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0~2 | 範例測資 | 0 |
2 | 0~79 | 無額外限制 | 100 |