洛谷 U5737 纸条

Posted 一蓑烟雨任生平

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 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;
}

 

 

 

以上是关于洛谷 U5737 纸条的主要内容,如果未能解决你的问题,请参考以下文章

传纸条(洛谷 1006)

洛谷P1006传纸条

洛谷 P1006 传纸条 题解

洛谷动态规划(多维)P1006 传纸条

洛谷P1006传纸条

洛谷1006==codevs1169