天天看點

2015百度之星 列變位法解密列變位法解密 Problem's Link:   http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1002

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 65536/65536 K (Java/Others)

Problem Description

列變位法是古典密碼算法中變位加密的一種方法,具體過程如下 将明文字元分割成個數固定的分組(如5個一組,5即為密鑰),按一組一行的次序整齊排列,**最後不足一組不放置任何字元**,完成後按列讀取即成密文。 比如: 原文:123456789 密鑰:4 變換後的矩陣: [pre]1234 5678 9xxx[/pre] (最後的幾個x表示無任何字元,不是空格,不是制表符,就沒有任何字元,下同) 密文:159263748 再比如: 原文:Hello, welcome to my dream world! 密鑰:7 變換後的矩陣: [pre]Hello, welcome to my dream w orld!xx[/pre] 密文: Hw doeetrrlloellc adoomm!,my e w 實作一個利用列變位法的加密器對Bob來說輕而易舉,可是,對Bob來說,想清楚如何寫一個相應的解密器似乎有點困難,你能幫幫他嗎?

Input

第一行一個整數$T$,表示$T$組資料。 每組資料包含$2$行 第一行,一個字元串$s(1 \leq |s| \leq 1e5)$,表示經過列變位法加密後的密文 第二行,一個整數$K(1 \leq K \leq |s|)$,表示原文在使用列變位法加密時的密鑰 輸入保證密文字元串中隻含有ASCII碼在$[0x20,0x7F)$範圍内的字元

Output

對于每組資料,先輸出一行 Case #i: 然後輸出一行,包含一個字元串s_decrypt,表示解密後得到的明文

Sample Input

Sample Output

Mean: 

略 

analyse:

水題,直接畫圖模拟

Time complexity: O(n)

Source code: 

2015百度之星 列變位法解密列變位法解密 Problem's Link:   http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1002
2015百度之星 列變位法解密列變位法解密 Problem's Link:   http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1002

View Code

繼續閱讀