📄 ac1002.pas
字号:
Program ural1002;
Const
dict:array['a'..'z']of char=
('2','2','2','3','3','3','4','4','1','1','5','5','6','6',
'0','7','0','7','7','8','8','8','9','9','9','0');
maxn=100;
maxlen=50;
Var
len:array[1..maxn]of integer;
phone:string[maxn];
st:string[maxlen];
res:array[1..maxn]of string;
can:array[1..maxn,1..maxn]of string[maxlen];
j:byte;
i,n:word;
//
Procedure compare(x:byte;s:string[maxlen]);
var i:byte;
begin
for i:=1 to length(s) do
if phone[x-length(s)+i]<>dict[s[i]]
then exit;
can[x,length(s)]:=s;
end;
//
Begin
{ assign(input,'e:\1002.txt');
reset(input); }
repeat
fillchar(res,sizeof(res),0);
fillchar(can,sizeof(can),0);
fillchar(len,sizeof(len),0);
readln(phone);
if phone='-1' then halt;
readln(n);
for i:=1 to n do
begin
readln(st);
for j:=length(st) to length(phone) do
if can[j,length(st)]=''
then compare(j,st);
end;
for i:=1 to length(phone) do
if can[i,i]<>''
then begin
res[i]:=can[i,i];
len[i]:=1;
end
else begin
len[i]:=255;
for j:=1 to i-1 do
if (can[i,i-j]<>'')and(len[j]+1<len[i])
then begin
len[i]:=len[j]+1;
res[i]:=res[j]+' '+can[i,i-j];
end;
end;
if(res[length(phone)]<>'')
then writeln(res[length(phone)])
else writeln('No solution.');
until false;
close(input);
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -