文档章节

uva 755 - 487--3279

面码
 面码
发布于 2014/08/21 14:01
字数 900
阅读 101
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

题目

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

思路及说明

    基础题,直接查表解决,parseNum中应该还能压缩时间。

代码

#include <iostream>
#include <cstring>
#include <string>
#include <cstring>
#include <fstream>
#include <sstream>
#include <vector>
#include <cstdlib>
#include <cstdio>
#include <map>
using namespace std;


#ifdef DEBUG
ifstream in;
ofstream out;
#endif

#ifdef DEBUG
#define inpath      "./in.txt"
#define outpath     "./out.txt"
#define CIN     in
#define COUT    out
#else
#define CIN     cin
#define COUT    cout
#endif


/*
A,B,andC mapto   2
D,E,and F mapto   3
G,H,and I mapto   4
J,K,and L mapto   5
M,N,and O mapto  6
P,R,and S mapto   7
T,U,and V mapto   8
W,X,and Y mapto   9
*/

struct keyTable{
    keyTable(){
            memset(table, 0, sizeof(char) * 256);
            table['A'] = '2';
             table['B'] = '2';
              table['C'] = '2';
               table['D'] = '3';
                table['E'] = '3';
                 table['F'] = '3';
                  table['G'] = '4';
                   table['H'] = '4';
                    table['I'] = '4';
                     table['J'] = '5';
                      table['K'] = '5';
                       table['L'] = '5';
                       table['M'] = '6';
                       table['N'] = '6';
                       table['O'] = '6';
                       table['P'] = '7';
                       table['R'] = '7';
                       table['S'] = '7';
                       table['T'] = '8';
                       table['U'] = '8';
                       table['V'] = '8';
                       table['W'] = '9';
                       table['X'] = '9';
                       table['Y'] = '9';
    }
    char convert(const char k){
            char ret = table[k];
            if( 0 == ret )
                    return k;
            else
                    return ret;
    }
    int table[256];
};

string parseNum(string vnum,struct keyTable &kt){
                string  num;
                int idx = 1;
                for(string::iterator iter= vnum.begin(); iter != vnum.end(); iter++){
                        if( *iter == (char)'-')
                               ;
                        else{
                                num += kt.convert(*iter);
                                if(3 == idx)
                                    num += '-';
                                  idx++;
                        }

                }
#ifdef DEBUG
            cout << vnum<< " -> " << num << endl;
#endif // DEBUG
            return num;
}

int main()
{
#ifdef DEBUG
    in.open(inpath,     ios::in);
    out.open(outpath,   ios::out);
    if(in.fail()){
            cout << "input init fail " << "\n";
            return -1;
    }
    if(out.fail()){
             cout << "output init fail " << "\n";
            return -1;
    }
#endif
    struct keyTable kt;
    int cases;
    int numTot;
    string str;
    map<string, int> ansTable;
     CIN >> cases;
     while(cases--){
        ansTable.clear();
        CIN >> numTot;
        for(int numCurr = 1; numCurr <= numTot; numCurr++){
                CIN >> str;
                ansTable[parseNum(str, kt)]++;
        }
        int  flag = 0;
        for(map<string, int>::iterator iter = ansTable.begin(); iter != ansTable.end(); iter++){
                    if(iter->second > 1){
                        COUT << iter->first << " " << iter->second << endl;
                        flag = 1;
                    }
        }
        if(0 == flag){
                COUT<<"No duplicates."<<endl;
        }
        if(0 != cases)
                COUT << endl;
     }
return 0;
}

© 著作权归作者所有

面码
粉丝 26
博文 293
码字总数 72288
作品 0
成都
程序员
私信 提问
poj 1002 487-3279

487-3279 Description 企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁卢大学打电话时,可以拨打 TUT-GLOP。有时...

locusxt
2013/11/25
306
0
ACM Summer Training Warm up

ACM Summer Training Warm up Cover 热身水题 题目 HDU 4500 小Q系列故事——屌丝的逆袭 思路 简单的模拟,一个数组读入数据,一个数组计算维护结果 HDU 2109 Fighting for HDU 思路 简单排序...

SpiffyEight77
2017/08/14
0
0
在Ubuntu下配置MRTG监控Nginx和服务器系统资源

Ubuntu使用apt-get来管理软件包,非常的好用,可以自行解决依赖问题。 1、安装mrtg和snmp apt-get install mrtg snmpd sar curl 2、配置snmpd 编辑/etc/snmp/snmpd.conf文件 改为如下内容即可...

王振威
2013/08/06
4.9K
6
百练2974: 487-3279 之 Java 解答, 可惜超时

总时间限制: 1000ms 内存限制: 65536kB 描述 企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁卢大学打电话时,可...

圣洁之子
2016/07/20
33
1
【欧拉定理+思维】UVA - 11426 GCD - Extreme (II)

版权声明:时间是有限的,知识是无限的,那就需要在有限的时间里最大化的获取知识。 https://blog.csdn.net/Firetocheat_/article/details/82946561 【欧拉定理+思维】UVA - 11426 GCD - Ext...

bryce1010
2018/10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dynamic-connectivity 动态连通性问题之 quick-union 算法

quick-union 的思想是:若对象 p 的 root_id 和对象 q 的 root_id 相等,则认为 p 和 q 连通。 若要将对象 p 和对象 q 连通(已知两对象未连通),则将 p 的 root_id 的值设为 q 的 root_id ...

Phpythoner_Alei
今天
33
0
OSChina 周六乱弹 —— 实在选不出来就唱国歌

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享阿冗的单曲《你的答案》。--祝大家在2020年都找到自己答案。 《你的答案》- 阿冗 手机党少年们想听歌,请使劲...

小小编辑
今天
10
0
Maven打包可执行Jar包的方法

在使用Java开发中,会使用到将工程打包成可执行的jar包的情况,那么在maven中怎么将项目中的依赖包都添加到jar中呢。在pom.xml中添加一下插件: <build><plugins><plugin><ar...

CapJes
今天
10
0
使用vue 开发地图类系统(openlayers.js)的注意。

使用vue 开发地图类系统的注意。 1、使用地图应该创建的对象 少使用 vue 的data 和计算属性(comments)存数据或是vuex。 为什么要要注意这个问题呢? 答:这个就要了解到vue的实现原理 。原理...

DY-Tao
昨天
7
0
web移动端学习:高德地图demo(一)

在高德地图开发中申请开发者资格,然后在控制台中新建应用,获得KEY; 新建模板HTML文件; <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>地图demo</title><scri......

dxiya
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部