jzoj 1389. 【2012.02.25普及组】单词 结题报告

题目描述

  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头奶牛名字的好听度。


样例输入
5 3
Bessie
Jonathan
Montgomery
Alicia
Angola
se
nGo
Ont
样例输出
1
1
2
0
1
 
       
代码如下:
  直接枚举即可 这道题其实超级水!!!不要被那个极限的(1000*1000*30*100)的循环吓到了,事实上这个4重循环是可以卡过的(jzoj上是AC哒)
var
 n,m,i,j,k,l,d:longint;   s:boolean;
 a:array[0..300]of ansistring;
 b:array[0..10000]of ansistring;
 c:array[-1..10000]of longint;

procedure init;
var i:longint;
begin
  readln(n,m);
 for i:=1 to n do
 begin
   readln(b[i]);
   b[i]:=upcase(b[i]);
 end;
  for i:=1 to m do
  begin
    readln(a[i]);
    a[i]:=upcase(a[i]);
  end;
end;

begin
 init;
 for i:=1 to n do
  begin
  for j:=1 to m do
   begin
       d:=0;
    for l:=1 to length(a[j]) do
     begin
      s:=false;
      for k:=d+1 to length(b[i]) do
      if a[j][l]=b[i][k] then begin d:=k; s:=true; break; end;
      if not s then break;
     end;
      if s then inc(c[i]);
   end;
  end;
 for i:=1 to n do
  writeln(c[i]);
end.

 
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值