program Hadamard (input, output); { (c) 01/10/'97 Pascal-uitwerking van de NKP'97-opgave "Hadamard" } const max = 1000; type bucketsort = array[0..max] of integer; Hmatrix = record rijbucket, kolombucket : bucketsort; end; var I, n, run : integer; { n(globaal) = dimensie van de H-matrices } procedure leesHadamard (var H : Hmatrix); type tabel = array[1..max] of integer; var rijeen, kolomeen : tabel; i, j, getal, aantal : integer; begin with H do begin { buckets legen } for i := 0 to n do begin rijbucket[i] := 0; kolombucket[i] := 0; end; { 1_i (H^t) initialiseren } for i := 1 to n do begin kolomeen[i] := 0; end; { matrix lezen en 1_i (H(t)), rij-bucket bijhouden } for i := 1 to n do begin aantal := 0; for j := 1 to n do begin read(getal); if getal=1 then begin aantal := aantal + 1; kolomeen[j] := kolomeen[j] + 1; end; end; readln; rijeen[j] := aantal; rijbucket[aantal] := rijbucket[aantal]+1; end; { kolom-bucket bepalen } for j := 1 to n do begin aantal := kolomeen[j]; kolombucket[aantal] := kolombucket[aantal] + 1; end; end; end; { leesHadamard } procedure instantie; { werkt een probleem-instantie af } var t : integer; H1, H2 : Hmatrix; equivalent : boolean; begin readln(n); leesHadamard(H1); readln; { lege regel weglezen } leesHadamard(H2); { buckets matchen } t := 0; equivalent := true; while equivalent and (t<=n) do begin equivalent := ((H1.rijbucket[t]=H2.rijbucket[t]) and (H1.kolombucket[t]=H2.kolombucket[t])); t := t+1; end; { buckets gelijk ==> H1 ~ H2 } if equivalent then begin writeln('equivalent'); end else begin writeln('niet equivalent'); end; end; { instantie } begin readln(I); for run := 1 to I do begin instantie; end; end.