Cod sursa(job #4728)

Utilizator fogabFodor Gabor fogab Data 6 ianuarie 2007 14:05:51
Problema Matrix Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.94 kb
var f:text;
    ok:boolean;
    m,n,i,j,sol:integer;
    c:char;
    a:array[1..1000,1..1000] of char;
    b:array[1..1000,1..1000,'a'..'z'] of longint;
    h:array['a'..'z'] of longint;
begin
sol:=0;
assign(f,'matrix.in');
reset(f);
readln(f,m,n);
for i:=1 to m do
  begin
   for j:=1 to m do read(f,a[i,j]);
   readln(f);
  end;
for i:=1 to n do
  begin
   for j:=1 to n do begin
                     read(f,c);
                     inc(h[c]);
                    end;
   readln(f);
  end;
close(f);
for i:=1 to n do
    for j:=1 to n do inc(b[1,1,a[i,j]]);
ok:=true;
for c:='a' to 'z' do
    if h[c]<>b[1,1,c] then
      begin
        ok:=false;
        break;
      end;
if ok then inc(sol);
for i:=1 to m-n do
  begin
    b[i+1,1]:=b[i,1];
    for j:=1 to n do begin
                      dec(b[i+1,1,a[i,j]]);
                      inc(b[i+1,1,a[n+i,j]]);
                     end;
    ok:=true;
    for c:='a' to 'z' do
      if h[c]<>b[i+1,1,c] then
        begin
          ok:=false;
          break;
        end;
    if ok then inc(sol);
  end;
for j:=1 to m-n do
  begin
   b[1,j+1]:=b[1,j];
   for i:=1 to n do begin
                      dec(b[1,j+1,a[i,j]]);
                      inc(b[1,j+1,a[i,j+n]]);
                    end;
    ok:=true;
    for c:='a' to 'z' do
      if h[c]<>b[1,j+1,c] then
        begin
          ok:=false;
          break;
        end;
    if ok then inc(sol);
   for i:=1 to m-n do
     begin
      for c:='a' to 'z' do b[i+1,j+1,c]:=b[i,j+1,c]+b[i+1,j,c]-b[i,j,c];
      inc(b[i+1,j+1,a[i,j]]);
      dec(b[i+1,j+1,a[i+n,j]]);
      dec(b[i+1,j+1,a[i,j+n]]);
      inc(b[i+1,j+1,a[i+n,j+n]]);
      ok:=true;
      for c:='a' to 'z' do
        if h[c]<>b[1,j+1,c] then
          begin
            ok:=false;
            break;
          end;
      if ok then inc(sol);
     end;
  end;
assign(f,'matrix.out');
rewrite(f);
writeln(f,sol);
close(f);
end.