Tyvj P1110 潜伏者

http://www.tyvj.cn:8080/Problem_Show.asp?id=1110

背景 Background

NOIP2009提高组第一题

描述 Description

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:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。

输入格式 Input Format

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

输出格式 Output Format

输出共1 行。
若破译密码停止时出现 2,3 两种情况,请你输出“Failed”(不含引号,注意首字母大
写,其它小写)。
否则请输出利用密码翻译电报中加密信息后得到的原信息。

样例输入 Sample Input

AA

AB

EOWIE

样例输出 Sample Output

Failed

时间限制 Time Limitation

1s

注释 Hint

【输入输出样例说明】
原信息中的字母‘A’和‘B’对
应相同的密字,输出“Failed”

 

 

program noip2009t1;
 var
  r,rb:array['A'..'Z']of char;
  l,i:integer;
  j:char;
  a,b,c,d:string;
 begin
  d := '';
  for j := 'A' to 'Z' do begin r[j]:='0';rb[j]:='0'end;
  readln (a);
  readln (b);
  readln (c);
  l := length(a);
  if l < 26 then begin write ('Failed');exit;end;
  for i := 1 to l do
   begin
    if r[a[i]]='0' then r[a[i]]:=b[i];
    if rb[b[i]]='0' then rb[b[i]]:=a[i];
    if (b[i]<>r[a[i]])or(a[i]<>rb[b[i]]) then
     begin
      write ('Failed');
      exit;
     end;
   end;
  for j := 'A' to 'Z' do
    if r[j]='0' then begin write ('Failed');exit;end;
  l := length (c);
  for i := 1 to l do
   d := d + r[c[i]];
  writeln(d);
 end.

 

 

一开始居然最后writeln(c)了。。。交了3遍才发现。。TMD

posted on 2011-01-30 18:36  yachen  阅读(404)  评论(0编辑  收藏  举报

导航