i400. 2. 字串解碼
標籤 : APCS 字串 模擬
通過比率 : 1475人/1627人 ( 91% ) [非即時]
評分方式:
Tolerant

最近更新 : 2022-06-13 00:33

內容

有一個字串加密系統,對於一個長度為 $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 \le m, n \le 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
測資資訊:
記憶體限制: 256 MB
提示 :

範例測資一,如題目所述

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

標籤:
APCS 字串 模擬
出處:
2022年6月APCS [管理者: algo.seacow@ ... (演算法海牛) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
41170 glps1004@gma ... (Ian) i400
186 2024-07-08 19:26
40856 aa0939166015 ... (咖波) i400
解題思路
164 2024-06-15 23:28
34510 willy633526@ ... (ByTech) i400
python 題解
576 2023-03-26 22:27
34339 luray0601@gm ... (QWERTYPIG) i400
C++題解
868 2023-03-11 21:40
33786 tttest (testunknown) i400
C++ 詳解
867 2023-02-03 12:04