POJ_2159
来源:互联网 发布:41478 网络电视直播 编辑:程序博客网 时间:2024/06/07 23:17
题目见:http://poj.org/problem?id=2159
可以说题目本身有一定的迷惑性,一串明文经过凯撒加密和乱序加密得到一串密文,现在要求判断密文和猜测的明文是否一致。
乍看到这个题目,首先想到的是按步骤反过来解密,然后和明文对比是否相同就行。可是发现对于乱序加密来说,乱序码是不知道的!它是随机的,而且题目只给出了10以内的乱序码,而输入可以不大于100!显然,这种反过来解密的方法是不可取的了。
想了一会儿,实在是不知道该如何下手,忍不住看了下题目下放讨论,大家都在说什么“频率”,“频率分布一样,就YES”。然后又自习读了遍题目。原来真是这样!
判断密文和猜测明文是否一致,只要把频数出现相同的字母归结为一类,再将频数排序后,比较频数是否相同就可以拉!(唉~ 真是替自己拙计。。)只要相同就输出YES就好了,至于它到底是通过什么乱序吗加密的,就不需要我们来考虑了,毕竟我们也是猜的嘛!(例如:密文中有nihao,且其中的每个字母出现了一次,把他们归为一类。明文中有buyao,每个字母也仅出现一次,这样我们就认为这两类是等价的!)
下面给出程序的C++代码:
#include<iostream>#include<string>#include<algorithm>using namespace std;int main(){int i;string input;int mm[26],mw[26];memset(mm,0,sizeof(mm)); memset(mw,0,sizeof(mw));cin>>input;for(i=0;i<input.length();i++){mm[input[i]-'A']++;}cin>>input;for(i=0;i<input.length();i++){mw[input[i]-'A']++;}sort(mm,mm+26); sort(mw,mw+26); for(i=0;i<26;i++)if(mm[i]!=mw[i]){cout<<"NO"<<endl;return 0;}cout<<"YES"<<endl;return 0;}
- POJ_2159
- POJ_2159
- POJ_2159
- 巴甫洛夫条件反射的matlab程序
- Java包及访问控制权限--(private/default/protected/public)及命名规范
- jquery知识点总结
- struts2 jar全都加进去时tomcat启动报错的解决办法
- 08-Scrum过程-办公环境 & 每日立会(Standup Meeting)
- POJ_2159
- 逆波兰表达式
- 常见的Request属性汇总
- vs2010编译错误之一
- 如何在Xcode里面运行C语言程序---简单展示
- 导出csv
- Cacti完全使用手册 ( 让你快速个性化使用Cacti )
- 编写CppUnit测试用例
- html转pdf 格式不变