POJ2159 Ancient Cipher【字符密码】

题目链接:

?id=2159

题目大意:

古罗马帝王的保密服务部门的保密方法是替换和重新排列。

替换方法是将出现的字符替换成其他的字符。如将’A’替换成’Z’,将’Z’替换成’A’。

排列方法是改变原来单词中字母的顺序。例如将顺序变为<2,1,5,4,3,7,6,10,9,8>。应用到字符串

"VICTORIOUS"上,则可以得到"IVOTCIRSUO"。

单用一种解密方法是不安全的,只有将两种方法结合起来才安全。那么问题来了:给你一个原文

字符串和加密字符串,问是否能通过这两种加密方法结合,从而由原文信息得到加密信息。如果

能则输出"YES",否则输出"NO"。

思路:

其实这道题没那么复杂,只要用两个数组分别存下两个字符串中各个字母的个数,排序一下,比较

字母个数是不是都相等就可以了,如果不是全相等,,则说明不能从原文信息得到加密信息。如果全

相等,则一定有方法从原文信息得到加密信息。

AC代码:

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;char s1[110],s2[110];int a[28],b[28];int main(){while(~scanf("%s%s",s1,s2)){memset(a,0,sizeof(a));memset(b,0,sizeof(b));int len1 = strlen(s1);int len2 = strlen(s2);for(int i = 0; i < len1; ++i)a[s1[i]-'A']++;for(int i = 0; i < len2; ++i)b[s2[i]-'A']++;sort(a,a+26);sort(b,b+26);int flag = 1;for(int i = 0; i < 26; ++i){if(a[i] != b[i]){flag = 0;break;}}if(flag)printf("YES\n");elseprintf("NO\n");}return 0;}

年轻是胜利的一半。

POJ2159 Ancient Cipher【字符密码】

相关文章:

你感兴趣的文章:

标签云: