(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’
‘A’−‘Z’构成(无空格等其他字符)。
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’
‘A’−‘Z’所有
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’
‘A’−‘Z’构成,且第1 行长度与第
2
2
2 行相等。
输出
输出文件
s
p
y
.
o
u
t
spy.out
spy.out共
1
1
1 行。
若破译密码停止时出现
2
,
3
2,3
2,3 两种情况,请你输出
“
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;
}