pku1002--487-3279

Description

企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁卢大学打电话时,可以拨打TUT-GLOP。有时,只将电话号码中部分数字拼写成单词。当你晚上回到酒店,可以通过拨打310-GINO来向Gino's订一份pizza。让电话号码容易被记住的另一个办法是以一种好记的方式对号码的数字进行分组。通过拨打必胜客的“三个十”号码3-10-10-10,你可以从他们那里订pizza

电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:
A, B, C 映射到 2
D, E, F 映射到 3
G, H, I 映射到 4
J, K, L 映射到 5
M, N, O 映射到 6
P, R, S 映射到 7
T, U, V 映射到 8
W, X, Y 映射到 9

QZ没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 TUT-GLOP的标准格式是888-4567310-GINO的标准格式是310-44663-10-10-10的标准格式是310-1010

如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)

你的公司正在为本地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相同的电话号码。

Input

输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了QZ)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。

Output

对于每个出现重复的号码产生一行输出,输出是号码的标准格式紧跟一个空格然后是它的重复次数。如果存在多个重复的号码,则按照号码的字典升序输出。如果输入数据中没有重复的号码,输出一行:
No duplicates.

Sample Input

12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279

Sample Output

310-1010 2
487-3279 4
888-4567 3

 

 

 

解析:本题主要是字符的处理。当读入字符的时候可以直接转换成数值。排序选择桶排。根据桶排重复出现的转换成字符串加0,和-号。

 

 

 

var n:longint;

    s:array[1..100000] of longint;
    jishu:array[0..9999999] of longint;

procedure ini;
var i,k:longint;
    ch:char;

begin

 assign(input,'pp.in');reset(input);
assign(output,'pp.out');rewrite(output);
readln(n);
for i:=1 to n  do
  begin
     k:=0;
     while k<7 do
        begin
           read(ch);{读入字符转换成数值}
           case ch of
              '0'..'9': begin k:=k+1; s[i]:=s[i]*10+(ord(ch)-ord('0'));end;
              'A','B','C': begin k:=k+1; s[i]:=s[i]*10+2; end;
              'D','E','F': begin k:=k+1; s[i]:=s[i]*10+3; end;
              'G','H','I': begin k:=k+1; s[i]:=s[i]*10+4; end;
              'J','K','L': begin k:=k+1; s[i]:=s[i]*10+5; end;
              'M','N','O': begin k:=k+1; s[i]:=s[i]*10+6; end;
              'P','R','S': begin k:=k+1; s[i]:=s[i]*10+7; end;
              'T','U','V': begin k:=k+1; s[i]:=s[i]*10+8; end;
              'W','X','Y': begin k:=k+1; s[i]:=s[i]*10+9; end;
           end;

        end;

        jishu[s[i]]:=jishu[s[i]]+1;{桶排}
     readln;

  end;
end;

 

procedure print;
var i:longint;
    m:string;
    f:boolean;
begin
f:=true;
for i:= 0 to 9999999 do
   begin
      if  jishu[i]>1 then    {根据桶排,如果出现两次的把它变成字符串,加最左边的0和第四位-号}
          begin
              f:=false;
              str(i,m);
              while length(m)<7 do
                    insert('0',m,1);
              insert('-',m,4);
              writeln(m,' ',jishu[i]);
          end;
   end;
if f=true then writeln('No duplicates.');{如果没有重复出现的数}
end;


begin
ini;

print;

 

 

 close(input);
     close(output);
     end.

 

posted @ 2010-03-29 09:31  jesonpeng  阅读(313)  评论(0编辑  收藏  举报