前往
大廳
主題

ZeroJudge - d097: 10038 - Jolly Jumpers 解題心得

Not In My Back Yard | 2021-03-24 01:15:20 | 巴幣 0 | 人氣 429

題目連結:


題目大意:
輸入有多列,每列為一筆測試資料。每列開頭給定一正整數 n (n < 3000),代表有一個 n 個整數的序列。同一列緊接著給定 n 個整數,代表該序列的內容。

一個 n 個整數的序列為 Jolly Jumpers,其滿足每兩個相鄰數字之差的絕對值皆相異且其值為 1 ~ n - 1,即該序列之相鄰數字差值之絕對值所形成的序列為 1 ~ n - 1 這 n - 1 個整數的一種排列。

試問給定的序列是否為 Jolly Jumpers。如果是,則輸出「Jolly」;反之,則輸出「Not jolly」。



範例輸入:
4 1 4 2 3
5 1 4 2 -1 6


範例輸出:
Jolly
Not jolly


解題思維:
我們可以用一個大小為 n 之布林陣列 C 儲存差值的存在性,其中 C[i] 代表差值 i 有出現於序列中。

接著我們掃過一次給定的序列,每次將兩個相鄰的元素相減並取絕對值,得到一差值 d。

如果過程中,d 曾經不介於 1 ~ n - 1 之間或是 C[d] 已經為真(True)了,則代表本序列不可能為 Jolly Jumpers。因為前者情況代表著有差值超過了範圍,後者的情況則是有兩個差值重複了(代表差值所形成的序列不可能為 1 ~ n - 1 的一種排列)。

如果上述的情況沒有在掃描的過程中發生,則該序列為 Jolly Jumpers;反之,給定的序列不是 Jolly Jumpers。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作