算法:字符串处理
分析:裸的模拟题,我们可以先判断原字串与对应字串的长度,如果长度不同直接break。可以减少约2s的时间。
program NDK1252;
const
maxn=200;
var
n,m,ans:longint;
final,s:array [0..maxn] of string;
a:array [0..maxn] of longint;
procedure init;
var
i:longint;
begin
ans:=0;
readln(n,m);
for i:=1 to m do readln(s[i]);
for i:=1 to m do readln(a[i]);
for i:=1 to n do readln(final[i]);
end;
procedure main;
var
i,j,k:longint;
temp:string;
begin
for i:=1 to m do
begin
for j:=1 to n do
begin
for k:=1 to length(final[j]) do
begin
if k+length(s[i])-1>length(final[j]) then break;
temp:=copy(final[j],k,length(s[i]));
if s[i]=temp then inc(ans,k*a[i]);
end;
end;
end;
writeln(ans);
end;
begin
assign(input,'NDK1252.in'); reset(input);
assign(output,'NDK1252.out'); rewrite(output);
init;
main;
close(input); close(output);
end.