Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program solution;
- {$APPTYPE CONSOLE}
- {MODE DELPHI}
- {$MAXSTACKSIZE 1000000000}
- {O-,R+,Q+}
- {$O+,R-,Q-}
- uses
- SysUtils,
- Math;
- var
- n, m, len, sol, ans, i, j, z : integer;
- s : string;
- can : array[0..201, 0..27] of boolean;
- used : array[0..201] of boolean;
- res : array[0..201] of integer;
- r : array[0..201, 0..201] of boolean;
- procedure gets(var s : string);
- var ch : char;
- begin
- s := '';
- read(ch);
- while not (ch in ['A'..'Z']) do
- read(ch);
- while ch in ['A'..'Z'] do begin
- s := s + ch;
- read(ch);
- end;
- end;
- function f(ch : char) : integer;
- begin
- result := ord(ch) - ord('A') + 1;
- end;
- function dfs(a : integer) : boolean;
- var i : integer;
- begin
- result := false;
- if used[a] then
- exit;
- used[a] := true;
- for i := 1 to len do
- if (r[i, a]) and ((res[i] = 0) or (dfs(res[i]))) then begin
- res[i] := a;
- result := true;
- exit;
- end;
- end;
- begin
- //assign(input, 'input.txt'); reset(input);
- //assign(output, 'output.txt'); rewrite(output);
- read(n, m);
- for i := 1 to n do begin
- gets(s);
- for j := 1 to length(s) do
- can[i, f(s[j])] := true;
- end;
- ans := 0;
- for i := 1 to m do begin
- gets(s);
- len := length(s);
- for j := 1 to len do
- for z := 1 to n do
- r[j, z] := false;
- for j := 1 to len do
- for z := 1 to n do
- if can[z, f(s[j])] then
- r[j, z] := true;
- for j := 1 to len do
- res[j] := 0;
- sol := 0;
- for j := 1 to n do begin
- for z := 1 to n do
- used[z] := false;
- if dfs(j) then
- inc(sol);
- end;
- if sol = len then
- inc(ans);
- end;
- writeln(ans);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement