洛谷 U5737 纸条
题目背景
明明和牛牛是一对要好的朋友,他们经常上课也想讲话,但是他们的班级是全校纪律最好的班级,所以他们只能通过传纸条的方法来沟通。但是他们并不能保证每次传纸条老师都无法看见,所以他们对纸条进行了加密。
题目描述
明明和牛牛的纸条一共分为两行,第一行有26个小写字母,代表着每个字符的加密字符——第一个字母代表着a(A)的加密字符,第二个字母代表着b(B)的加密字符...(大写字母的加密字符是相同的大写字母)。第二行就是加密过的话,需要根据第一行破译出它的内容。如果加密有误,就输出“Error”。(一个)
加密有误指第一行的26字母有重复(有字母没有出现)
输入输出格式
输入格式:
两行,第一行是26个字母,意思如题。第二行是一段加密过的话
输出格式:
如题:破译出的话
输入输出样例
输入样例#1:
bcdefghijklmnopqrstuvwxyza
J ibwf b ofx qfodjm.
输出样例#1:
I have a new pencil.
输入样例#2:
bcdefghijklmnopqrstuvwxyja
J ibwf b ofx qfodjm.
输出样例#2:
Error
说明
加密过的话长度在255位以内
输入中包括',','.','?'三种标点
- 输入规模
40%的数据满足:输出没有Error
100%数据满足:只有两个Error
思路:水题。
错因:输入方式错误。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int num[27];
string s,a,p;
char ans[27]={'0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int main(){
getline(cin,s);
for(int i=0;i<26;i++){
int k=s[i]-'a'+1;
if(num[k]){
cout<<"Error";
return 0;
}
num[k]=i+1;
}
getline(cin,p);
for(int i=0;i<=p.length();++i) {
int flag=0,b;
if(p[i]>='A'&&p[i]<='Z'){
flag=1;
p[i]+=32;
}
if(p[i]>='a'&&p[i]<='z'){
b=num[p[i]-'a'+1];
p[i]=ans[b];
if(flag) p[i]-=32;
}
}
cout<<p;
return 0;
}
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。