P1079Vigenère密码
这是2012年noip提高组的的DAY1T1,我用了一下午的时间,一次性AC^^。
这是一个字符串的模拟题。首先给出了一个密码对应法则,我们发现在同一对角线的明文通过密钥得出来的密文是相同的。根据八皇后,我们可得i+j相同的则为同一个密文。然后可以把序号改成asscii的话,密文-密钥=明文+A/a,这里我是通过强制转成int再转回char实现的。然而第一次我想通过打表来做。那么第二个问题则是要把密钥的长度填充到和明文长度相同,我选用了while嵌套来for密钥以此达到相同长度。第三点则是有小写和大写输出之分,先写一个judge函数判断,分成全大,全小,一大一小(两种)。然后再根据要求一点点写吧~那么这个地方有一个问题,那么就是: 密文是A,密钥Z,这种情况就出现了负数,然后我们就手推几组数据得到+26即可,相当于一个来回。另外一大一小时要先开变量去转换。通过一次次的调试,终于过样例了了,样例答案是这样的:Where is a will,there is a will.
1.做题时一心一意,别乱下位玩,很浪费时间,虽然题太难时坐立不安。
2.写程序时可以再新建一个,用来测试,或者找asscii码等
3.再次说手推样例很重要,一定要心平气和地算。
4.学会类比,比如这个对角线可以类比八皇后,强转换再类比那天机房考试的密码题
5.调试的过程中一定要有信念,出现问题也一定要有决心去解决
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
string k,c;
char kk[],cc[];
bool judge(char x){//判断是否是大写
if(int(x)>=&&int(x)<=){
return true;
}
else return false;
}
int main(){
cin>>k;//秘钥
cin>>c;//明文加密后的密文
int len=c.length();
int len_k=k.length();
int n=;
while(n<=len){//把密钥填充满
for(int i=;i<=len_k-;i++){
kk[n]=k[i];
n++;
}
}
for(int i=;i<=len-;i++){//将最后的密文转成数组
cc[i+]=c[i];
}
/* for(int i=1;i<=len;i++){
cout<<kk[i]<<" "<<cc[i]<<endl;;
}*/
//cout<<endl;
for(int i=;i<=len;i++){
int ques=;
if(judge(cc[i])==true&&judge(kk[i])==true){//全是大写的
if(int(cc[i])-int(kk[i])>=){
ques=int(cc[i])-int(kk[i])+;
cout<<char(ques);
}
else{
ques=int(cc[i])-int(kk[i])++;
cout<<char(ques);
}
}
else if(judge(cc[i])==true&&judge(kk[i])==false){//密文是大写,密钥是小写,还是输出大写
int kkk=int(kk[i])-;
int ccc=int(cc[i]);
if(ccc-kkk>=){
ques=ccc-kkk+;
cout<<char(ques);
}
else{
ques=ccc-kkk++;
cout<<char(ques);
}
}
else if(judge(cc[i])==false&&judge(kk[i])==true){//密文是小写,密钥是大写,输出小写
int kkk=int(kk[i])+;
int ccc=int(cc[i]);
if(ccc-kkk>=){
ques=ccc-kkk+;
cout<<char(ques);
}
else{
ques=ccc-kkk++;
cout<<char(ques);
}
}
else if(judge(cc[i])==false&&judge(kk[i])==false){//两个都是小写
if(int(cc[i])-int(kk[i])>=){
ques=int(cc[i])-int(kk[i])+;
cout<<char(ques);
}
else{
ques=int(cc[i])-int(kk[i])++;
cout<<char(ques);
}
}
}
return ;
}
P1079Vigenère密码的更多相关文章
- 对抗密码破解 —— Web 前端慢 Hash
(更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- 【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...
- Centos 下 mysql root 密码重置
重置mysql密码的方法有很多,官网也提供了很方便的快捷操作办法,可参考资料 resetting permissions .本文重置密码的具体步骤如下: 一.停止MySQL(如果处于运行状态) #se ...
- CentOS7 重置root密码
1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在按下 Con ...
- Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)
忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...
- 从c#角度看万能密码SQL注入漏洞
以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...
- C# 用SoapUI调试WCF服务接口(WCF中包含用户名密码的验证)
问题描述: 一般调试wcf程序可以直接建一个单元测试,直接调接口. 但是,这次,我还要测试在接口内的代码中看接收到的用户名密码是否正确,所以,单一的直接调用接口方法行不通, 然后就想办法通过soapU ...
- 信息安全-2:python之hill密码算法[原创]
转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...
随机推荐
- SSM整合之---简单选课系统
简单选课系统 一.实体图 二.功能 三.代码实现 1.SSM环境搭建 (1)pom.xml <dependencies> <dependency> <groupId> ...
- python中继承、定制类
2.4python中继承 继承中不要忘了调用super().__init__ def __init__(self,args) super(subclass,self).__init___(args) ...
- 运行Spark官方提供的例子
去spark官网把spark下载下来: https://spark.apache.org/downloads.html 解压,可以看下目录: 其中examples目录下提供了java,scala,py ...
- 搭建Ambari 2.6.0 tar 解压缩报错
背景:我们使用的方式不是wget 去下载ambari的源码包,而是在windows 的 firefox 下直接下载,将文件存储到本地. 执行 tar -zxvf HDP-2.6.3.0-centos7 ...
- springCloud分布式事务实战(一)案例需求及实现步骤
本文不对分布式事务原理进行探索,而是通过一个案例来说明如何使用分布式事务 案例需求:创建2个基于springCloud的微服务,分别访问不同的数据库:然后创建一个整合服务,调用微服务实现数据的保存到2 ...
- Mysql 数据库锁表的原因和解决方法
摘自: https://www.csdn.net/gather_2f/MtTaIgxsMTM5NC1ibG9n.html 锁表的原因:当多个连接(数据库连接)同时对一个表的数据进行更新操作,那么速度将 ...
- 【机器学习速成宝典】模型篇02线性回归【LR】(Python版)
目录 什么是线性回归 最小二乘法 一元线性回归 多元线性回归 什么是规范化 Python代码(sklearn库) 什么是线性回归(Linear regression) 引例 假设某地区租房价格只与房屋 ...
- leetcode-easy-array-66 .plus one
mycode 主要在计算商和余数的时候一定要用还没更新的商和余数哦 class Solution(object): def plusOne(self, digits): ""&qu ...
- DB2创建视图并授权给其他用户
创建视图并授权给其他用户 可以在操作系统界面.或者DB2交互界面下进行数据库操作 查看数据库节点[db2inst1@ELONEHR-DB ~]$ db2 list db directory Syste ...
- P1076 寻宝
P1076 寻宝 题解 这道题真是感人啊,废了蒟蒻一天的时间 关键 1. a[ k ][ ] 数组记录第k层有楼梯房间的编号 a[ k ][ 0 ] 第k层有几个有楼梯的房间 a[ k ][ i ] ...