題目名稱:
列變位法解密
problem description
列變位法是古典密碼演算法中變位加密的一種方法,具體過程如下 將明文本元分割成個數固定的分組(如5個一組,5即為金鑰),按一組一行的次序整齊排列,最後不足一組不放置任何字元
,完成後按列讀取即成密文。
比如:原文:123456789
金鑰:4
變換後的矩陣:
12345678
9***
(最後的幾個x表示無任何字元,不是空格,不是製表符,就沒有任何字元,下同)
密文:159263748
再比如:
原文:hello, welcome to my dream world!
金鑰:7
變換後的矩陣:
hello,welcome
to my
dream w
orld!xx
密文:hw doeetrrlloellc adoomm!,my e w
實現乙個利用列變位法的加密器對bob來說輕而易舉,可是,對bob來說,想清楚如何寫乙個相應的解密器似乎有點困難,你能幫幫他嗎?
input
第一行乙個整數
t ,表示
t 組資料。
每組資料報含
2 行
第一行,乙個字串s(
1≤|s
|≤1e
5),表示經過列變位法加密後的密文
第二行,乙個整數k(
1≤k≤
|s|)
,表示原文在使用列變位法加密時的金鑰
輸入保證密文字串中只含有ascii碼在[0
x20,0
x7f)
範圍內的字元
output
對於每組資料,先輸出一行
case #i:
然後輸出一行,包含乙個字串s_decrypt,表示解密後得到的明文
sample input
4159263748
4hw doeetrrlloellc adoomm!,my e w
7toodming is best
16sokaisan
1
sample output
case #1:123456789
case #2:
hello, welcome to my dream world!
case #3:
toodming is best
case #4:
sokaisan
思路:這是一道模擬題,相當於你把數字寫成矩形,然後原文是從左往右讀,加密後是從上往下讀,可以先解出加密後的行數和列數,然後按題意來解就行了。
**如下:
#include#include#include#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
char a[100005];
int main()
printf("\n");
}return 0;
}
2015百度之星資格賽1002
problem description 列變位法是古典密碼演算法中變位加密的一種方法,具體過程如下 將明文本元分割成個數固定的分組 如5個一組,5即為金鑰 按一組一行的次序整齊排列,最後不足一組不放置任何字元,完成後按列讀取即成密文。比如 原文 123456789 金鑰 4 變換後的矩陣 1234 ...
2015百度之星資格賽1001
題目名稱 大搬家 problem description 近期b廠組織了一次大搬家,所有人都要按照指示換到指定的座位上。指示的內容是坐在位置 i 上的人要搬到位置 j 上。現在b廠有 n 個人,一對一到 n 個位置上。搬家之後也是一一對應的,改變的只有位次。在第一次搬家後,度度熊由於疏忽,又要求大家...
2015百度之星資格賽1004
題目名稱 放盤子 problem description 小度熊喜歡惡作劇。今天他向來訪者們提出乙個惡俗的遊戲。他和來訪者們輪流往乙個正多邊形內放盤子。最後放盤子的是獲勝者,會贏得失敗者的乙個吻。玩了兩次以後,小度熊發現來訪者們都知道遊戲的必勝策略。現在小度熊永遠是先手,他想知道他是否能獲勝。注意盤...