青青草国产成人av片免费/香港三级日本韩国三级专线/国内自拍在钱/天堂国产女人av

回復

【原創】日常解密

樓主: 198490 | 查看: 1029 | 回復: 1

查看: 1029|回復: 1

[預告函/密碼] 【原創】日常解密

原創  已解決  簡潔模式
發表于 2023-10-8 13:56:57 云南| 發自安卓客戶端 發帖際遇
未經作者同意,禁止轉載本篇謎題
(這個一點也不難。)
問題:解密下列密碼信息,密碼信息是一個長度為n的整數序列A,每個整數均在1到m之間(1≤m≤100)。解密規則如下:

1. 對于序列A中任意兩個相鄰元素A[i]和A[i+1],它們的差值(|A[i+1] - A[i]|)必須出現在序列A中至少兩次。
2. 對于序列A中任意三個相鄰元素A[i]、A[i+1]和A[i+2],它們的差值(|A[i+2] - A[i]|)必須出現在序列A中至少兩次。

請根據以上規則,設計一個解密算法,給出密碼信息的解密結果。若無解,則返回"No solution"。

示例:

輸入:n = 5, m = 5, A = [2, 3, 1, 5, 2]

輸出:[2, 3, 1, 2, 5]

0

0

分享

此回答在 2023-10-8 14:15 被選定為謎題答案

| 樓主| 發表于 2023-10-8 13:57:04 云南| 發自安卓客戶端
解題思路:

首先,我們需要理解密碼信息的解密規則。根據規則1,差值(|A[i+1] - A[i]|)必須出現在序列A中至少兩次。這個規則可以理解為,在序列A中,任意兩個相鄰元素的差值必須是序列A中已經出現過的差值。規則2可以類似地理解。

根據以上理解,我們可以設計一個解密算法。

解密算法:

1. 初始化一個哈希表diff_count,用于存儲差值及其出現次數。將序列A轉化為差值序列diff,并將diff序列中出現的差值及其次數存儲在diff_count中。
2. 初始化一個哈希表diff_positions,用于存儲差值在diff序列中的位置。遍歷diff序列,將差值及其在diff序列中的位置存儲在diff_positions中。
3. 初始化一個空列表result,用于存儲解密結果。
4. 遍歷diff序列,對于diff序列中的每個差值d,檢查d在diff_count中出現的次數是否大于等于2。若是,將d轉換為對應的元素值(如果d是正數,轉換為A[i] + d,如果d是負數,轉換為A[i] - d),并將轉換后的元素值添加到result中。
5. 若result的長度等于n,則返回result作為解密結果。否則,返回"No solution"。

以下是解密算法的Python實現:

```python
def decrypt(n, m, A):
    diff = [abs(A[i+1] - A[i]) for i in range(n-1)]
    diff_count = {}
    for d in diff:
        if d not in diff_count:
            diff_count[d] = 0
        diff_count[d] += 1
    diff_positions = {}
    for i, d in enumerate(diff):
        if d not in diff_positions:
            diff_positions[d] = []
        diff_positions[d].append(i)
    result = []
    for d in diff:
        if diff_count[d] >= 2:
            pos = diff_positions[d].pop(0)
            if pos == 0:
                result.append(A[0] + d)
            else:
                result.append(A[pos-1] + d)
    if len(result) == n:
        return result
    else:
        return "No solution"
```

根據以上算法,對于示例輸入n = 5, m = 5, A = [2, 3, 1, 5, 2],可以計算出diff = [1, 2, 4, 3],diff_count = {1: 1, 2: 1, 3: 1, 4: 1},diff_positions = {1: [0], 2: [1], 3: [2], 4: [3]}。然后遍歷diff,對于差值1,其在diff_count中出現1次,不滿足至少出現2次的條件,跳過。對于差值2,其在diff_count中出現1次,不滿足至少出現2次的條件,跳過。對于差值3,其在diff_count中出現1次,不滿足至少出現2次的條件,跳過。對于差值4,其在diff_count中出現1次,不滿足至少出現2次的條件,跳過。因此,無法構造出滿足解密規則的序列,返回"No solution"。
補充:我是學計算機的,這題是和朋友一起弄的。
尚未登錄
您需要登錄后才可以回帖 登錄 | 加入學院