您的位置:首页 > 其它

1566: [NOI2009]管道取珠 - BZOJ

2015-07-23 00:25 519 查看
Description

const
maxn=550;
h=1024523;
var
f:array[0..1,-1..maxn,-1..maxn]of longint;
a,b:array[0..maxn]of char;
n,m,xi,yi:longint;

function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end;

procedure main;
var
i,j,l:longint;
begin
readln(n,m);
for i:=1 to n do read(a[i]);readln;
for i:=1 to m do read(b[i]);
f[0,0,0]:=1;xi:=0;yi:=1;
for l:=1 to n+m do
begin
for i:=0 to min(n,l) do
for j:=0 to min(n,l) do
begin
if a[i]=a[j] then inc(f[yi,i,j],f[xi,i-1,j-1]);
if b[l-i]=b[l-j] then inc(f[yi,i,j],f[xi,i,j]);
if a[i]=b[l-j] then inc(f[yi,i,j],f[xi,i-1,j]);
if b[l-i]=a[j] then inc(f[yi,i,j],f[xi,i,j-1]);
f[yi,i,j]:=f[yi,i,j]mod h;
end;
xi:=xi xor 1;yi:=yi xor 1;
fillchar(f[yi],sizeof(f[yi]),0);
end;
writeln(f[xi,n,n]);
end;

begin
main;
end.


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: