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