Fork me on GitHub

NYOJ题目769乘数密码

-----------------------------------------

这道题目是有一点小技巧的,因为取模运算没办法还原所以只好计算所有存储起来然后找映射,但是存储数据的使用场景是解密,再存储从明文到密文的映射就不太合适了,于是就存储从密文到明文的映射,这样子的话解密的时候就可以线性的从密文到明文。

AC代码:

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 
 5 public class Main {
 6 
 7     public static void main(String[] args) throws IOException {
 8         
 9         BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));;
10         
11         boolean first=true;
12         
13         while(first || reader.ready()){
14             first=false;
15             
16             String s=reader.readLine();
17             String ss[]=s.split("\\s{1,}");
18             initMapping(Integer.parseInt(ss[1]));
19             System.out.println(encoding(ss[0]));
20         }
21     }
22     
23     private static int[] mapping=new int[26];
24     
25     public static void initMapping(int k){
26         for(int i=0;i<mapping.length;i++){
27             mapping[k*i%26]=i;
28         }
29     }
30     
31     public static char[] encoding(String s){
32         char cs[]=s.toCharArray();
33         for(int i=0;i<cs.length;i++){
34             cs[i]=(char) (mapping[cs[i]-'A']+'A');
35         }
36         return cs;
37     }
38     
39 }

 

题目来源: http://acm.nyist.net/JudgeOnline/problem.php?pid=769

posted @ 2016-08-29 08:19  CC11001100  阅读(246)  评论(0编辑  收藏  举报