百练 2820 古代暗码 解题呈报

    添加时间:2013-6-7 点击量:

    1.Link:http://poj.grids.cn/practice/2820/


    2.content


    总时候限制:
    1000ms
    内存限制:
    65536kB
    描述
    古罗马帝王有一个包含各类项目组的强大当局组织。此中有一个项目组就是保密办事项目组。为了保险起见,在省与省之间传递的首要文件中的大写字母是加密的。当时最风行的加密办法是调换和从头分列。
    调换办法是将所有呈现的字符调换成其它的字符。有些字符会碰劲调换成它本身。例如:调换规矩可所以将A 到 Y调换成它的下一个字符,将Z调换成 A,若是原词是 VICTORIOUS 则它变成 WJDUPSJPVT。
    分列办法改变本来单词中字母的次序。例如:将次序 <2, 1, 5, 4, 3, 7, 6, 10, 9, 8> 应用到 VICTORIOUS 上,则获得IVOTCIRSUO。

    们很如意识到零丁应用调换办法或分列办法,加密是很不保险的。然则若是连络这两种办法,在当时就可以获得很是靠得住的加密办法。所以,很多首要信息先应用替
    换办法加密,再将加密的成果用分列的办法加密。用两中办法连络就可以将VICTORIOUS 加密成JWPUDJSTVP。
    考古学家比来在一个石台上发了然一些信息。初看起来它们毫无意义,所以有人假想它们可能是用调换和分列的办法被加密了。人们试着解读了石台上的暗码,如今他们想搜检解读的是否正确。他们须要一个策画机法度来验证她,你的任务就是写这个验证法度。




    输入
    输入有两行。第一行是石台上的文字。文字中没有空格,并且只有大写英文字母。第二行是被解读出来的加密前的文字。第二行也是由大写英文字母构成的。
    两行字符数量标长度都不跨越规划100。
    输出
    若是第二行经过某种加密办法后可以产生第一行的信息,输出 YES,不然输出NO。
    样例输入

    JWPUDJSTVP
    
    VICTORIOUS

    样例输出

    YES
    


    3.code



     1 #include <iostream>
    
    2 #include <cstdio>
    3 #include <cstdlib>
    4 #include <cstring>
    5 using namespace std;
    6 const int NUM = 26;
    7 #define MAX 200
    8 int main()
    9 {
    10 //freopen(F:\\input.txt,r,stdin);
    11
    12 int i,j;
    13 int res[2][NUM];
    14 memset(res,0sizeofint)NUM2);
    15
    16 char str[2][MAX];
    17 for(i = 0 ; i < 2; i++) cin>>str[i];
    18
    19 for(i = 0; i < 2; i++
    20 {
    21 int len = strlen(str[i]);
    22 for(j = 0; j < len; j++
    23 {
    24 res[i][(str[i][j]-A)]++;
    25 }
    26 }
    27
    28 for(i = 0; i < NUM; i++
    29 {
    30 for(j = 0; j < NUM; j++
    31 {
    32 if(res[0][i] == res[1][j]) break;
    33 }
    34 if(j < NUM) res[1][j] = -1;
    35 else break;
    36 }
    37 if(i < NUM) cout<<NO<<endl;
    38 else cout<<YES<<endl;
    39
    40 return 0;
    41 }


    4.method


    (1) statics the character num

    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: