⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac1002.pas

📁 timus1014 题解 题目很简单所以不再多讲 直接给源程序
💻 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 + -