jzoj 1389. 【2012.02.25普及组】单词

发布于 2019-03-19  924 次阅读


题目

FJ想计算他的N(1<=N<=1000)只奶牛的名字的好听度,每个名字是一个长度不超过1000的英文字母组成。

 

他创建了一个好名字的集合,数量为M(1<=M<=100),每个好名字的长度不超过30,奶牛的名字中每包含一个好名字(“包含”不一定要求连续),那么它的好听度就加1.

 

所有的名字都不区分大小写,如名字“Bessie”包含“Be”、“sI”、“EE”、“Es”,但是不包含“eB”。

 

现在请你帮FJ计算每个奶牛名字的好听度。

 

输入

第1行: 2个用空格隔开的整数:N 和 M;

第2..N+1行: 第i+1为第i个奶牛的名字;

第N+2..N+M+1行:第N+i+1行为第i个好名字。

输出

第1..N行:第i个数为第i头奶牛名字的好听度。

思路

 

暴力枚举每一个名字和好名字,用一个指针来记录好名字中的每一个单词,每找到一个加一,如果最后指针大于长度就累加结果

程序

var
  a,b:array[0..10000] of ansistring;
  st,s:ansistring;
  ch:char;
  i,j,k,n,m,ans,q,p:longint;
begin
  readln(n,m);
  for i:=1 to n do
  begin
    readln(a[i]);
    a[i]:=upcase(a[i]);
  end;
  for i:=1 to m do
  begin
    readln(b[i]);
    b[i]:=upcase(b[i]);
  end;

  for i:=1 to n do
    begin
      for j:=1 to m do
        begin
          q:=1;
          p:=1;
          s:=a[i];
          st:=b[j];
          while q<=length(s) do
            begin
              if s[q]=st[p] then
                begin
                  inc(q);
                  inc(p);
                end
              else inc(q);
            end;
          if p>length(st) then begin inc(ans); end;
        end;
      writeln(ans);
      ans:=0;
    end;
end.