UVa 755 487--3279

原创 2015年07月10日 14:47:30

Description


Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the University of Waterloo by dialing the memorable TUT-GLOP. Sometimes only part of the number is used to spell a word. When you get back to your hotel tonight you can order a pizza from Gino's by dialing 310-GINO. Another way to make a telephone number memorable is to group the digits in a memorable way. You could order your pizza from Pizza Hut by calling their ``three tens'' number 3-10-10-10.


The standard form of a telephone number is seven decimal digits with a hyphen between the third and fourth digits (e.g. 888-1200). The keypad of a phone supplies the mapping of letters to numbers, as follows:


A, B, and C map to 2

D, E, and F map to 3

G, H, and I map to 4

J, K, and L map to 5

M, N, and O map to 6

P, R, and S map to 7

T, U, and V map to 8

W, X, and Y map to 9


There is no mapping for Q or Z. Hyphens are not dialed, and can be added and removed as necessary. The standard form of TUT-GLOP is 888-4567, the standard form of 310-GINO is 310-4466, and the standard form of 3-10-10-10 is 310-1010.


Two telephone numbers are equivalent if they have the same standard form. (They dial the same number.)


Your company is compiling a directory of telephone numbers from local businesses. As part of the quality control process you want to check that no two (or more) businesses in the directory have the same telephone number.

Input 

The first line of the input contains the number of datasets in the input. A blank line follows. The first line of each dataset specifies the number of telephone numbers in the directory (up to 100,000) as a positive integer alone on the line. The remaining lines list the telephone numbers in the directory, with each number alone on a line. Each telephone number consists of a string composed of decimal digits, uppercase letters (excluding Q and Z) and hyphens. Exactly seven of the characters in the string will be digits or letters. There's a blank line between datasets.

Output 

Generate a line of output for each telephone number that appears more than once in any form. The line should give the telephone number in standard form, followed by a space, followed by the number of times the telephone number appears in the directory. Arrange the output lines by telephone number in ascending lexicographical order. If there are no duplicates in the input print the line:

No duplicates.

Print a blank line between datasets.

Sample Input 

1

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



Miguel A. Revilla
2000-02-09

输入T,后面跟着T个输入块。

每个输入块第一行输入N,后面跟着N个电话号码,电话号码由数字字母和“-”组成。

通过给出的字母映射表把字母转化为数字,并去除多余的“-”,最后输出的电话格式为xxx-xxxx。

统计相同号码出现的次数,输出重复的电话号码及出现次数,按电话号码的数字排序。

若全部没有重复,输出一行表示没有重复。

每个输入块对应的输出块之间有一个空行。


基本的字符串处理,使用了cctype中判断数字字母的方法。

然后使用map存入,键值为电话号码,值为次数,自带排序。


#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <cctype>           //包含isdigit()和isalpha()方法
using namespace std;

map<string,int> m;
char p[10];
char str[100];

//字母所对应的数字的映射
char let2num[26] = {'2', '2', '2', '3', '3', '3', '4', '4', '4',
                '5', '5', '5', '6', '6', '6', '7', '7', '7',
                '7', '8', '8', '8', '9', '9', '9', '9'};

int main(){
//freopen("test.in","rt",stdin);
    int t,n,i,j;
    cin >>t;
    while(t--){
        cin >>n;
        int flag = 0;   //记录是否有重复的号码
        m.clear();
        for(i = 0;i < n;i++){
            cin >>str;
            int len = strlen(str);
            int cnt = 0;
            p[3] = '-';
            for(j = 0;j < len;j++){
                if(cnt == 3){           //电话号码格式固定第4个为“-”
                    cnt ++;
                }
                if(isdigit(str[j])){        //若为数字,则不变
                    p[cnt++] = str[j];
                }
                else if(isalpha(str[j]) && (str[j] != 'Q'|| str[j] != 'Z')){    //将除Q,Z外的字母转换为数字
                    p[cnt++] = let2num[str[j] - 'A'];
                }
            }
            string phone(p);    //构造字符串
            if(m.count(phone)){    //记录判断次数及将其插入map中
                m[phone]++;
            }
            else{
                m[phone] = 1;
            }
        }
        for(map<string,int>::iterator it = m.begin();it != m.end();++it){     //迭代器遍历map输出
            if(it->second > 1){                                                //只输出重复的电话号码,若有重复则flag = 1;
                cout <<it->first <<" " <<it->second <<endl;
                flag = 1;
            }
        }
        if(!flag){                          //当没有重复时输出 No duplicates.
            cout <<"No duplicates." <<endl;
        }
        if(t != 0){                         //输出块之间的空行
            cout <<endl;
        }
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

uva 755 487--3279

题意:给你字母对应的数字,和包含字母与数字的字符串,要你把它们转化成标准格式(即只包含数字且数字中间含‘-’),然后输出有重复出来的,且输出它们的重复次数。 要注意的是,可以出现全部是0的字符串,还...
  • shiqi_614
  • shiqi_614
  • 2011年09月22日 23:53
  • 588

UVa 755 487--3279解题报告

第一道超时题目,数据量太大达到100000,。如果要一个一个手动模拟比较,肯定会超时。看了别人的代码,都是用到了stl的map容器。果然是神器,如果不用map还真不知道怎么在3秒内输出结果。用了map...
  • u012411003
  • u012411003
  • 2014年02月06日 13:27
  • 397

UVa: 755 - 487--3279

1,排序。 2,计数。比较相邻str,搜索会TLE。 3,注意最后一个str的比较,我这里多加了一个"zzzzzzz"的str。 4,如果没有重复电话号码的情况应该输出"No d...
  • u010652938
  • u010652938
  • 2013年05月13日 20:49
  • 371

UVa 755 - 487--3279

又是一篇血泪史. 这个题目和POJ1002是差不多的,先前已经做过一遍 大概半个小时后就完成了.. 但是以为跟POJ上的一样,要处理Q和Z..就又折腾了一些时间. 折腾来折腾去不管怎么提交都是WA.....
  • u014247806
  • u014247806
  • 2014年03月30日 13:21
  • 754

UVA 755 487--3279

分析:这个题就有点难度了,设置一个常量数组必不可少,神器记录每个电话号码出现的次数即可。 UVA的题的格式真是让人一醉再醉,一跪再跪,空行,一定要读懂题意,看明白空行所在的位置。。。WA数次,该死的...
  • qq_32036091
  • qq_32036091
  • 2015年12月21日 06:44
  • 325

UVA 755 487--3279

题目487-3279分析给出一些电话号码的字符串,进行清洗和转义,输出重复的电话(即出现次数>=2),如果该组测试数据没有重复要输出No duplicates。思路可以视电话号码为数字,利用桶排序存储...
  • lab103
  • lab103
  • 2015年07月26日 20:44
  • 178

uva 755 (487--3279)排序

这是一简单的排序,之所以把这道题放上面呢,是因为我在这道题上实在wa太多了,wa了7次,中间找出来 个错误,就是在倒数第一个和倒数第二个相等的情况下我没有输出他们的个数,改正后还是wa,最后我发现原来...
  • sinat_22659021
  • sinat_22659021
  • 2015年06月06日 17:56
  • 336

uva 755 - 487--3279

487-3279  Businesses like to have memorable telephone numbers. One way to make a telephone ...
  • Frankiller
  • Frankiller
  • 2012年06月11日 20:25
  • 2333

UVA 755 - 487--3279

Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is...
  • cjl3011
  • cjl3011
  • 2014年01月27日 17:37
  • 436

Uva 755 487--3279

487-3279  Businesses like to have memorable telephone numbers. One way to make a telephon...
  • HelloWorld10086
  • HelloWorld10086
  • 2014年07月23日 13:57
  • 526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 755 487--3279
举报原因:
原因补充:

(最多只允许输入30个字)