早教吧作业答案频道 -->其他-->
vijos中的P1752潜伏者,请高手码个pascal的代码,一定要能AC的,谢谢!题目:R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。历尽艰险后,潜伏于S国的R国间谍小C
题目详情
vijos中的P1752潜伏者,请高手码个pascal的代码,一定要能AC的,谢谢!
题目:
R 国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。
历尽艰险后,潜伏于 S国的 R 国间谍小 C 终于摸清了 S国军用密码的编码规则:
1. S 国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所
得的内容均由大写字母‘A’-‘Z’构成(无空格等其他字符) 。
2. S国对于每个字母规定了对应的“密字” 。加密的过程就是将原信息中的所有字母替
换为其对应的“密字” 。
3. 每个字母只对应一个唯一的“密字” ,不同的字母对应不同的“密字” 。 “密字”可以
和原字母相同。
例如,若规定‘A’的密字为‘A’ , ‘B’的密字为‘C’ (其他字母及密字略) ,则原信
息“ABA”被加密为“ACA” 。
现在,小 C 通过内线掌握了 S 国网络上发送的一条加密信息及其对应的原信息。小 C
希望能通过这条信息,破译 S 国的军用密码。小 C 的破译过程是这样的:扫描原信息,对
于原信息中的字母 x(代表任一大写字母) ,找到其在加密信息中的对应大写字母 y,并认为
在密码里 y是 x 的密字。如此进行下去直到停止于如下的某个状态:
1. 所有信息扫描完毕, ‘A’-‘Z’ 所有 26 个字母在原信息中均出现过并获得了相应
的“密字” 。
2. 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
3. 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反 S国密码的编码规则) 。例
如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
在小 C 忙得头昏脑涨之际,R 国司令部又发来电报,要求他翻译另外一条从 S 国刚刚
截取到的加密信息。现在请你帮助小 C:通过内线掌握的信息,尝试破译密码。然后利用破
译的密码,翻译电报中的加密信息。
题目:
R 国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。
历尽艰险后,潜伏于 S国的 R 国间谍小 C 终于摸清了 S国军用密码的编码规则:
1. S 国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所
得的内容均由大写字母‘A’-‘Z’构成(无空格等其他字符) 。
2. S国对于每个字母规定了对应的“密字” 。加密的过程就是将原信息中的所有字母替
换为其对应的“密字” 。
3. 每个字母只对应一个唯一的“密字” ,不同的字母对应不同的“密字” 。 “密字”可以
和原字母相同。
例如,若规定‘A’的密字为‘A’ , ‘B’的密字为‘C’ (其他字母及密字略) ,则原信
息“ABA”被加密为“ACA” 。
现在,小 C 通过内线掌握了 S 国网络上发送的一条加密信息及其对应的原信息。小 C
希望能通过这条信息,破译 S 国的军用密码。小 C 的破译过程是这样的:扫描原信息,对
于原信息中的字母 x(代表任一大写字母) ,找到其在加密信息中的对应大写字母 y,并认为
在密码里 y是 x 的密字。如此进行下去直到停止于如下的某个状态:
1. 所有信息扫描完毕, ‘A’-‘Z’ 所有 26 个字母在原信息中均出现过并获得了相应
的“密字” 。
2. 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
3. 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反 S国密码的编码规则) 。例
如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
在小 C 忙得头昏脑涨之际,R 国司令部又发来电报,要求他翻译另外一条从 S 国刚刚
截取到的加密信息。现在请你帮助小 C:通过内线掌握的信息,尝试破译密码。然后利用破
译的密码,翻译电报中的加密信息。
▼优质解答
答案和解析
var
s1,s2,s3:string;
a,b:array['A'..'Z']of char;
i:longint;
c:char;
begin
readln(s1); readln(s2); readln(s3);//s1为一条加密信息,s2为原信息。通过他们找到密码与原码之间的对应关系。
//一个加密字母对应一个原码字母(用a表示);一个原码字母对应一个密码字母(用b表示)
fillchar(a,sizeof(a),' ');//赋初值,即没有找到对应的原码字母
fillchar(b,sizeof(b),' ');//赋初值,即没有找到对应的密码字母
for i:=1 to length(s1) do
if ((a[s1[i]]<>' ')and(a[s1[i]]<>s2[i]))//不为空格,就是说已经有相应的原码字母
//<>s2[i],说明有另一个不同的原码字母(s1[i]为原来已经有的),矛盾
or((b[s2[i]]<>' ')and(b[s2[i]]<>s1[i]))//不为空格,就是说已经有相应的密码字母
//<>s1[i],说明有另一个不同的密码字母,矛盾
then begin
writeln('Failed');
exit;
end
else begin
a[s1[i]]:=s2[i];//s1[i]对应的原码存在a数组中
b[s2[i]]:=s1[i];//s2[i]对应的密码存在b数组中
end;
for c:='A' to 'Z' do
if a[c]=' ' then//处理原来的密码和原码字任串时,里面有不存在的字母
begin
writeln('Failed');
exit;
end;
for i:=1 to length(s3) do
write(a[s3[i]]);
end.
s1,s2,s3:string;
a,b:array['A'..'Z']of char;
i:longint;
c:char;
begin
readln(s1); readln(s2); readln(s3);//s1为一条加密信息,s2为原信息。通过他们找到密码与原码之间的对应关系。
//一个加密字母对应一个原码字母(用a表示);一个原码字母对应一个密码字母(用b表示)
fillchar(a,sizeof(a),' ');//赋初值,即没有找到对应的原码字母
fillchar(b,sizeof(b),' ');//赋初值,即没有找到对应的密码字母
for i:=1 to length(s1) do
if ((a[s1[i]]<>' ')and(a[s1[i]]<>s2[i]))//不为空格,就是说已经有相应的原码字母
//<>s2[i],说明有另一个不同的原码字母(s1[i]为原来已经有的),矛盾
or((b[s2[i]]<>' ')and(b[s2[i]]<>s1[i]))//不为空格,就是说已经有相应的密码字母
//<>s1[i],说明有另一个不同的密码字母,矛盾
then begin
writeln('Failed');
exit;
end
else begin
a[s1[i]]:=s2[i];//s1[i]对应的原码存在a数组中
b[s2[i]]:=s1[i];//s2[i]对应的密码存在b数组中
end;
for c:='A' to 'Z' do
if a[c]=' ' then//处理原来的密码和原码字任串时,里面有不存在的字母
begin
writeln('Failed');
exit;
end;
for i:=1 to length(s3) do
write(a[s3[i]]);
end.
看了 vijos中的P1752潜伏...的网友还看了以下:
求Sn=a+aa+aaa+……+aa…a之值,其a中代表1 到 9 中的一个数字.如:a代表2 , 2020-04-06 …
求Sn=a+aa+aaa+……+aa…a之值,其a中代表1 到 9 中的一个数字.如:a代表2 , 2020-05-15 …
鸦片战争以后,世界在走向中国,中国开始融入世界。一批又一批先进分子纷纷踏上救国之路。下列政治派别中 2020-06-27 …
把下面的乐派按年代顺序重新排列,并列举代表音乐家古典乐派、先锋乐派、巴洛克乐派、民族乐派、印象乐派 2020-07-24 …
这句话对吗盛唐出现了两大诗歌流派:以高适、岑参为代表的边塞诗派,以王维、谢灵运为代表的山水田园诗派 2020-07-26 …
若A是n阶可逆矩阵,|A|=a,且A中各行元素之和都是b,则|A|中代数余子式之和A11+A21+ 2020-08-03 …
若A是n阶可逆矩阵,|A|=a,且A中各行元素之和都是b,则|A|中代数余子式之和A11+A21+ 2020-08-03 …
史学界一般认为,应以发展的观点看问题,地主阶级抵抗派、洋务派、资产阶级维新派、资产阶级革命派和新文化 2020-11-15 …
在九届全国人大一次会议上,一批民主党派人士当选为中央国家机关的领导人。这表明A.民主党派是中国共产党 2020-11-27 …
正确评价洋务运动的是()A.张之洞创办汉阳铁厂B.洋务运动是中国近代化的开端C.洋务派提出“自强”的 2020-11-30 …