比赛 |
20120703 |
评测结果 |
AAAAAAAAAA |
题目名称 |
基因重组 |
最终得分 |
100 |
用户昵称 |
isabella |
运行时间 |
1.643 s |
代码语言 |
Pascal |
内存使用 |
63.64 MiB |
提交时间 |
2012-07-03 11:53:54 |
显示代码纯文本
const
t=5000000;code=390000;
ten:array[1..12]of longint=(2,11,23,37,43,97,119,973,95,901,123,47);
type
str=string[12];
point=^node;
node=record
data:str;
next:point;
end;
var
i,j,n,k,l,head,tail,step,tail2:longint;
s1,s2,s:string;
c:char;
p:point;
ch:array['A'..'Z']of longint;
b:array[0..390000]of point;
a:array[1..5000000]of str;
procedure hash(s:str);
var i,temp:longint;
begin
temp:=0;
for i:=1 to n do
temp:=(temp+ten[i]*ch[s[i]])mod code;
p:=b[temp];
while p<>nil do
begin
if p^.data=s then exit;
p:=p^.next;
end;
new(p);
p^.data:=s;
p^.next:=b[temp];
b[temp]:=p;
tail:=(tail mod t)+1;a[tail]:=s;
end;
begin
assign(input,'genea.in');reset(input);
assign(output,'genea.out');rewrite(output);
ch['A']:=3;ch['C']:=7;ch['T']:=13;ch['G']:=19;
readln(n);
readln(s1);readln(s2);
head:=0;tail:=1;tail2:=1;
a[1]:=s1;step:=1;
repeat
head:=(head mod t)+1;
s:=a[head];
s:=s+s[1];
delete(s,1,1);
if s=s2 then begin writeln(step);close(input);close(output);halt;end;
hash(s);
s:=a[head];
c:=s[1];s[1]:=s[2];s[2]:=c;
if s=s2 then begin writeln(step);close(input);close(output);halt;end;
hash(s);
if head=tail2 then begin inc(step);tail2:=tail;end;
until head>=tail;
close(input);close(output);
end.