a306: 2. 字串解碼[2022年6月APCS]
標籤 : 字串 模擬
通過比率 : 7人/9人 ( 78% ) [非即時]
評分方式:
Tolerant

最近更新 : 2022-11-04 16:14

內容

有一個字串加密系統,對於一個長度為 n 的字串 S 和一個長度為 n 01 字串 e,會產生一個加密過後的字串 T,其中加密流程為以下兩個步驟:


1. 如果字串 e 中 1 的出現次數是偶數,則直接進第二步驟,出現次數是奇數則將字串 S 平分成兩等份,兩份順序交換後再接起來,如果字串長度是奇數,則最中間的字元不動位置。
2. 讓 i 從 1 到 n 迭代,如果 e[i]=0 就將 S 的第一個字元切掉並接到字串 T 的最後一個字元,如果 e[i]=1 就將 S 的最後一個字元切掉並接到字串 T 的最後一個字元。

以範例 1 為例,e 陣列為 10110,其中 1 出現的次數為奇數,因此需要交換字串 S 從 BCAAD 變為 ADABC。接下來執行第二階段,其中過程如下。

給由 m 個 01 字串的加密表和按照順序加密原字串後得到加密過後的字串,請嘗試還原出原本的字串。

輸入說明

第一行輸入兩個數字 m, n (1≤m,n≤100),接下來有 m 個長度為 n 的 01 字串,最後輸入一個長度為 n 的加密字串, 字串均由大寫字母組成。

 

子題配分

  • (60%): m=1
  • (40%): 無額外限制
輸出說明

輸出解密後的字串。

範例輸入 #1
1 5
10110
CABAD
範例輸出 #1
BCAAD
範例輸入 #2
3 6
111110
101101
000000
RETYWQ
範例輸出 #2
QWERTY
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (50%): 1.0s , <1K
公開 測資點#1 (50%): 1.0s , <1K
提示 :

範例測資一,如題目所述

範例測資二過程如下
e = 111110,1 出現的數量為奇數次,因此需要將字串 "QWERTY" 切半翻轉成 "RTYQWE",經過 01 字串的轉換後會得到 "EWQYTR"。
e = 101101,1 出現的數量為偶數次,因此不用翻轉字串,經過 01 字串的轉換後會得到 "RETYWQ"。
e = 000000,1 出現的數量為偶數自,因此不用翻轉字串,經過 01 字串的轉換後會得到 "RETYWQ"。

  • 反過來還原密碼
  • 用deque可以輕鬆 (push_back/front) & (pop_back/front)
標籤:
字串 模擬
出處:
2022年6月APCS演算法海牛 [管理者: ]


編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」