好像很多人WA90...
WA90,第三个点没过的原因应该是是密字与原字母没有判断“一一对应”,一定是彼此都是唯一的对应,就是不同字母有不同密字 且不同密字对应不同字母..于是发现这个问题以后把整个算法都改了,加了一个BOOLEAN型的数组,判断这个密字或字母有没有在别的地方用过..
if..else..if..else..if..else..虽然比较麻烦但是并不太费时
还有个地方可以节省时间,
读入以后马上判断if length(s)<26就可以直接writeln('Failed'),然后halt。
终于AC~~
不同字母有不同密字 且不同密字对应不同字母。。当时想当然以为是一一对应。。
AC了,贴下程序。。
var
s1,s2,s3:string;
a,b:array['A'..'Z'] of char;
j,n:longint;
i:char;
begin
readln(s1);
readln(s2);
readln(s3);
for i:='A' to 'Z' do
begin
a[i]:='0';
b[i]:='0';
end;
for j:=1 to length(s1) do
begin
if (a[s1[j]]<>'0')and(a[s1[j]]<>s2[j])then
begin
writeln('Failed');
halt;
end;
if (b[s2[j]]<>'0')and(b[s2[j]]<>s1[j])then
begin
writeln('Failed');
halt;
end;
if (a[s1[j]]='0')and((b[s2[j]]=s1[j])or(b[s2[j]]='0')) then
begin
a[s1[j]]:=s2[j];
b[s2[j]]:=s1[j];
end;
end;
for i:='A' to 'Z' do
if a[i]='0' then
begin
writeln('Failed');
halt;
end;
for j:=1 to length(s3) do
write(a[s3[j]]);
writeln;
end.