博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA1339仿射和换位密码
阅读量:5341 次
发布时间:2019-06-15

本文共 1420 字,大约阅读时间需要 4 分钟。

UVA1339

【题目描述】:密码

古典密码学有两种密码,仿射和换位,给定一段明文,一段密文,看密文能否由这段明文,是否可能通过仿射和换位得到。

【算法分析】:这道题目的关键是读题。因为接触过密码学,所以容易理解。

仿射密码:M=(m+a)%26,注意:对于相同的字母,仿射到同一个字母

换位密码:就是把所有的字母重排。

所以这道提的关键是,无论怎么仿射和置换,不用的字母总数不会增加,相同的字母的个数不会增加。即使通过很多次这样的操作也是这样。所以统计两段密文,不同的字母出现的个数,排序后比较即可。题外话:可能变换成功。

 
1 //密码学:仿射密码和置换密码 2  3 //难点:读题和归纳 4  5 #include
6 7 #include
8 9 #include
10 11 #include
12 13 #include
14 15 #include
16 17 #include
18 19 #include
20 21 #include
22 23 #define MAXN 10+524 25 #define MAXM 20000+526 27 #define oo 955653128 29 #define eps 0.00000130 31 #define PI acos(-1.0)//这个精确度高一些32 33 #define REP1(i,n) for(int i=0;i<=(n);i++)34 35 #define REP2(i,n) for(int i=1;i<=(n);i++)36 37 using namespace std;38 39 char s1[1005],s2[1005];40 41 int ap1[30],ap2[30];42 43 bool isok()44 45 {46 47 memset(ap1,0,sizeof(ap1));48 49 memset(ap2,0,sizeof(ap2));50 51 for(int i=0; s1[i]!='\0'; i++)52 53 {54 55 ap1[s1[i]-'A'+1]++;56 57 ap2[s2[i]-'A'+1]++;58 59 }60 61 sort(ap1,ap1+27);62 63 sort(ap2,ap2+27);64 65 for(int i=0; i<27;i++)66 67 {68 69 if (ap1[i]!=ap2[i]) return false;70 71 }72 73 return true;74 75 }76 77 int main()78 79 {80 81 while(cin>>s1>>s2)82 83 {84 85 if (isok()) cout<<"YES"<

 

 

【关键词】:密码学(一般出题不难)

转载于:https://www.cnblogs.com/little-w/p/3525282.html

你可能感兴趣的文章
python全栈 计算机硬件管理 —— 硬件
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
struts1和struts2的区别
查看>>
Redis常用命令
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
YUI3自动加载树实现
查看>>
like tp
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
较快的maven的settings.xml文件
查看>>