标签:
-----------------------------------------
这道题目是有一点小技巧的,因为取模运算没办法还原所以只好计算所有存储起来然后找映射,但是存储数据的使用场景是解密,再存储从明文到密文的映射就不太合适了,于是就存储从密文到明文的映射,这样子的话解密的时候就可以线性的从密文到明文。
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
标签:
原文地址:http://www.cnblogs.com/cc11001100/p/5816579.html