Advertisement
Guest User

Untitled

a guest
Aug 16th, 2011
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.69 KB | None | 0 0
  1. program solution;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {MODE DELPHI}
  5. {$MAXSTACKSIZE 1000000000}
  6. {O-,R+,Q+}
  7. {$O+,R-,Q-}
  8.  
  9. uses
  10.   SysUtils,
  11.   Math;
  12.  
  13. var
  14.   n, m, len, sol, ans, i, j, z : integer;
  15.   s : string;
  16.   can : array[0..201, 0..27] of boolean;
  17.   used : array[0..201] of boolean;
  18.   res : array[0..201] of integer;
  19.   r : array[0..201, 0..201] of boolean;
  20.  
  21. procedure gets(var s : string);
  22. var ch : char;
  23. begin
  24.   s := '';
  25.   read(ch);
  26.   while not (ch in ['A'..'Z']) do
  27.     read(ch);
  28.   while ch in ['A'..'Z'] do begin
  29.     s := s + ch;
  30.     read(ch);
  31.   end;
  32. end;
  33.  
  34. function f(ch : char) : integer;
  35. begin
  36.   result := ord(ch) - ord('A') + 1;
  37. end;
  38.  
  39. function dfs(a : integer) : boolean;
  40. var i : integer;
  41. begin
  42.   result := false;
  43.   if used[a] then
  44.     exit;
  45.   used[a] := true;
  46.   for i := 1 to len do
  47.     if (r[i, a]) and ((res[i] = 0) or (dfs(res[i]))) then begin
  48.       res[i] := a;
  49.       result := true;
  50.       exit;
  51.     end;
  52. end;
  53.  
  54. begin
  55.   //assign(input, 'input.txt'); reset(input);
  56.   //assign(output, 'output.txt'); rewrite(output);
  57.   read(n, m);
  58.   for i := 1 to n do begin
  59.     gets(s);
  60.     for j := 1 to length(s) do
  61.       can[i, f(s[j])] := true;
  62.   end;
  63.   ans := 0;
  64.   for i := 1 to m do begin
  65.     gets(s);
  66.     len := length(s);
  67.     for j := 1 to len do
  68.       for z := 1 to n do
  69.         r[j, z] := false;
  70.     for j := 1 to len do
  71.       for z := 1 to n do
  72.         if can[z, f(s[j])] then
  73.           r[j, z] := true;
  74.     for j := 1 to len do
  75.       res[j] := 0;
  76.     sol := 0;
  77.     for j := 1 to n do begin
  78.       for z := 1 to n do
  79.         used[z] := false;
  80.       if dfs(j) then
  81.         inc(sol);
  82.     end;
  83.     if sol = len then
  84.       inc(ans);
  85.   end;
  86.   writeln(ans);
  87. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement