前言
“当我微笑时,我的笑容充满了诗人般放荡不羁的气质,在这放荡不羁的背后流露着的却是细腻而温暖的情感。当我沉默时,仰首便仿佛唱诗班纯洁的翩翩少女,垂首则像深刻而高雅的贵族。是的,我便是这样一个将各种仿佛不可调和的特质完美地融合在一起的男子。”欢迎来到嘟嘟课堂。今天,嘟嘟老师讲一道暴力题——单词。
题目描述
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
样例说明
输入说明:FJ有5头奶牛,名字依次为”Bessie”, “Jonathan”,”Montgomery”, Alicia”和”Angola”,有3个好名字分别为”se”,”nGo”和 “Ont”.
输出说明: “Bessie” 包含 “se”, “Jonathan”包含”Ont”, “Montgomery”包含 “nGo” 、 “Ont”, Alicia不包含任何好名字,”Angola”包含”nGo”.
思路
比赛的时候运行时错误,原因是把ansistring打成了string。反省:以后绝对不能粗心!注意老狐狸的智商!
这道题嘟嘟老师开了5个数组,很容易空间超限,所以这一点大家不要学我,可以优化一下。
这就是一个4重循环,最后一个循环我用L代替了。童鞋们应该能看得懂吧。
温馨提示:记得要转换大小写哦!
详见代码。
代码
var
a:array[1..1000,1..1000] of char;
b:array[1..100,0..30] of char;
c:array[1..1000] of integer;
d:array[1..100] of integer;
e:array[1..1000] of integer;
i,j,k,l,n,m:integer;
s:ansistring;
begin
readln(n,m);
for i:=1 to n do
begin
readln(s);
e[i]:=length(s);
for j:=1 to length(s) do
a[i,j]:=s[j];
end;
for i:=1 to m do
begin
readln(s);
d[i]:=length(s);
for j:=1 to length(s) do
b[i,j]:=s[j];
end;
for i:=1 to n do
begin
for j:=1 to m do
begin
l:=1;
for k:=1 to e[i] do
begin
if (a[i,k]=b[j,l]) or (ord(a[i,k])+32=ord(b[j,l])) or (ord(a[i,k])=ord(b[j,l])+32) then inc(l);
if (l>d[j]) then
begin
inc(c[i]);
break;
end;
end;
end;
end;
for i:=1 to n do
writeln(c[i]);
end.