(纪中)1834. 潜伏者(spy)

(File IO): input:spy.in output:spy.out
时间限制: 1000 ms 空间限制: 128000 KB 具体限制
Goto ProblemSet


题目描述
R R R 国和 S S S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。
历尽艰险后,潜伏于 S S S 国的 R R R 国间谍小 C C C 终于摸清了 S S S 国军用密码的编码规则:
1 . 1. 1 S S S 国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所得的内容均由大写字母 ‘ A ’ − ‘ Z ’ ‘A’-‘Z’ AZ构成(无空格等其他字符)。
2 . 2. 2 S S S 国对于每个字母规定了对应的“密字”。加密的过程就是将原信息中的所有字母替换为其对应的“密字”。
3 . 3. 3 每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。
例如,若规定 ‘ A ’ ‘A’ A的密字为 ‘ A ’ ‘A’ A ‘ B ’ ‘B’ B的密字为‘C’(其他字母及密字略),则原信息 “ A B A ” “ABA” ABA被加密为 “ A C A ” “ACA” ACA
现在,小 C C C通过内线掌握了 S S S 国网络上发送的一条加密信息及其对应的原信息。小 C C C希望能通过这条信息,破译 S S S 国的军用密码。小 C C C 的破译过程是这样的:扫描原信息,对于原信息中的字母 x x x(代表任一大写字母),找到其在加密信息中的对应大写字母y,并认为在密码里y 是x 的密字。如此进行下去直到停止于如下的某个状态:
1 . 1. 1 所有信息扫描完毕, ‘ A ’ − ‘ Z ’ ‘A’-‘Z’ AZ所有 26 26 26 个字母在原信息中均出现过并获得了相应的“密字”。
2 . 2. 2 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
3 . 3. 3 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S 国密码的编码规则)。例如某条信息 “ X Y Z ” “XYZ” XYZ被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
在小 C C C 忙得头昏脑涨之际, R R R 国司令部又发来电报,要求他翻译另外一条从 S S S 国刚刚截取到的加密信息。现在请你帮助小 C C C:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。


输入
输入文件名为 s p y . i n spy.in spy.in,共 3 3 3 行,每行为一个长度在 1 1 1 100 100 100 之间的字符串。
1 1 1 行为小 C C C 掌握的一条加密信息。
2 2 2 行为第1 行的加密信息所对应的原信息。
3 3 3 行为 R R R 国司令部要求小 C C C 翻译的加密信息。
输入数据保证所有字符串仅由大写字母 ‘ A ’ − ‘ Z ’ ‘A’-‘Z’ AZ构成,且第1 行长度与第 2 2 2 行相等。

输出
输出文件 s p y . o u t spy.out spy.out 1 1 1 行。
若破译密码停止时出现 2 , 3 2,3 23 两种情况,请你输出 “ F a i l e d ” “Failed” Failed(不含引号,注意首字母大写,其它小写)。
否则请输出利用密码翻译电报中加密信息后得到的原信息。


样例输入

S a m p l e I n p u t 1 : Sample Input1: SampleInput1
A A AA AA

A B AB AB

E O W I E EOWIE EOWIE

S a m p l e I n p u t 2 : Sample Input2: SampleInput2

Q W E R T Y U I O P L K J H G F D S A Z X C V B N QWERTYUIOPLKJHGFDSAZXCVBN QWERTYUIOPLKJHGFDSAZXCVBN

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 ABCDEFGHIJKLMNOPQRSTUVWXY ABCDEFGHIJKLMNOPQRSTUVWXY

D S L I E W O DSLIEWO DSLIEWO

S a m p l e I n p u t 3 : Sample Input3: SampleInput3

M S R T Z C J K P F L Q Y V A W B I N X U E D G H O O I L S M I J F R C O P P Q C E U N Y D U M P P MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP

Y I Z S D W A H L N O V F U C E R K J X Q M G T B P P K O I Y K A N Z W P L L V W M Q J F G Q Y L L YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL

F L S O FLSO FLSO


样例输出
Sample Output1:

F a i l e d Failed Failed

【输入输出样例 1 1 1 说明】

原信息中的字母 ‘ A ’ ‘A’ A ‘ B ’ ‘B’ B对应相同的密字,输出 “ F a i l e d ” “Failed” Failed

Sample Output2:

F a i l e d Failed Failed

【输入输出样例 2 2 2 说明】

字母 ‘ Z ’ ‘Z’ Z在原信息中没有出现,输出 “ F a i l e d ” “Failed” Failed

Sample Output3:

N O I P NOIP NOIP


数据范围限制
如题


解题思路
暴力模拟就好了。。。不多说,题意很好理解,直接开标吧。。


代码

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
string s1,s2,s3;
int l1,l2,l3,s;
bool ok;
char bsy[3][30]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
int main(){
	freopen("spy.in","r",stdin);
	freopen("spy.out","w",stdout);
    cin>>s1>>s2>>s3;
    l1=s1.size(),l2=s2.size(),l3=s3.size();
    s=26,ok=1;
    for(int i=0;i<l1;i++)
        for(int j=0;j<26;j++)
        {
            if(bsy[0][j]==s2[i]&&bsy[1][j]=='\0')
            {
                bsy[1][j]=s1[i];
                s--;
            }
            else if(s2[i]==bsy[0][j]&&bsy[1][j]==s1[i]);
            else if(bsy[0][j]==s2[i]&&bsy[1][j]!='\0')
            {
                ok=0;           
                break;
            }
        }
    if(s!=0)
        ok=0;
    for(int i=0;i<26;i++){
	    for(int j=0;j<26;j++){
	    	if((bsy[1][i]==bsy[0][j])&&bsy[2][j]=='\0') bsy[2][j]='6';
	    	else if((bsy[1][i]==bsy[0][j])&&bsy[2][j]!='\0'){
				ok=0;
				break;
			}
		}
		if(ok==0) break;
	}
	if(ok==0) printf("Failed");
    else for(int i=0;i<l3;i++){
		for(int j=0;j<26;j++){
			if(s3[i]==bsy[1][j]) cout<<bsy[0][j];
		}
	}
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值