算法练习之:487-3279

487-3279

Time Limit: 2000MS Memory Limit: 65536KB

Problem 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 input will consist of one case. The first line of the input 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.

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.

Example 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

Example Output

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

Hint

这题的一是:将数字字母映射成电话号码,并且删除多余的“-”,只保留或者插入一个‘-’在第四个字符;

并且只输出重复的电话号码和重复次数,没有的话输出No duplicates.

代码:

 1 //
 2 //  main.cpp
 3 //  SuanFa
 4 //
 5 //  Created by Crazy凡 on 2016/9/27.
 6 //  Copyright © 2016年 Crazy凡. All rights reserved.
 7 //
 8
 9 #include <iostream>
10 #include <map>
11 #include <string>
12 using namespace std;
13 char changeValue(char charc);
14 int main(int argc, const char * argv[]){
15     int a;
16     cin >> a;
17     map<string, int>countMap;
18     map<string, int>::iterator iter;
19     string inputString;
20     while (a--) {
21         cin >> inputString;
22         string::size_type index = inputString.find(‘-‘);
23         while (index != -1) {
24             inputString.erase(index, 1);
25             index = inputString.find(‘-‘);
26         }
27         for (int i = 0; i < inputString.length(); i++) {
28             inputString[i] = changeValue(inputString[i]);
29         }
30         inputString.insert(3, "-");
31         iter = countMap.find(inputString);
32         if (iter != countMap.end()) {
33             (iter -> second)++;
34         } else {
35             countMap.insert(pair<string, int>(inputString, 1));
36         }
37     }
38     int isOutAnyOne = 0;
39     for (iter = countMap.begin(); iter != countMap.end() ; iter++) {
40         if (iter -> second > 1) {
41             cout << iter -> first << " " << iter -> second << endl;
42             isOutAnyOne = 1;
43         }
44     }
45     if (isOutAnyOne == 0) {
46         cout << "No duplicates." << endl;
47     }
48     return 0;
49 }
50
51 char changeValue(char charc){
52     if (charc >= ‘A‘ && charc < ‘Q‘) {
53         return (charc - ‘A‘) / 3 + ‘2‘;
54     } else if(charc > ‘Q‘ && charc < ‘Z‘){
55         return (charc - ‘Q‘) / 3 + ‘7‘;
56     } else {
57         return charc;
58     }
59 }

Time:272ms Memory:13116kblanguage:g++ Code len:1615B:
时间: 2024-10-11 23:04:58

算法练习之:487-3279的相关文章

[转]Python打包工具

作者:Tarek Ziadé,翻译:张吉 原文:http://www.aosabook.org/en/packaging.html 转载地址:http://www.ituring.com.cn/article/19090 14.1 简介 对于如何安装软件,目前有两种思想流派.第一种是说软件应该自给自足,不依赖于其它任何部件,这点在Windows和Mac OS X系统中很流行.这种方式简化了软件的管理:每个软件都有自己独立的“领域”,安装和卸载它们不会对操作系统产生影响.如果软件依赖一项不常见的类

算法设计与分析 - 李春葆 - 第二版 - pdf-&gt;word v3

1 1.1 第1章─概论 2 3 1.1.1 练习题 4 1. 下列关于算法的说法中正确的有( ). 5 Ⅰ.求解某一类问题的算法是唯一的 6 Ⅱ.算法必须在有限步操作之后停止 7 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 8 Ⅳ.算法执行后一定产生确定的结果 9 A. 1个 B.2个 C.3个 D.4个 10 2. T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是( ). 11 A.T(n)= T(n-1)+1,T(1)=1 B.T(n)= 2n2 12 C.T(n)

模板化的七种排序算法,适用于T* vector&lt;T&gt;以及list&lt;T&gt;

最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板纯属于偷懒,更方便于测试代码的有效性,等代码写完也懒得去改了.下面开始介绍这段代码,有什么不对的地方欢迎前来指正. 一共写了七种排序,插入排序InsertSort.堆排序HeapSort.快速排序QuickSort.合并排序MergeSort,计数排序CountingSort,基数排序RadixSo

分类算法简介 基于R

最近的关键字:分类算法,outlier detection, machine learning 简介: 此文将 k-means,decision tree,random forest,SVM(support vector mechine),人工神经网络(Artificial Neural Network,简称ANN )这几种常见的算法 apply 在同一个数据集 spam,看各种方法预测错误率,或准确率,旨在追求预测准确性,辨识出这几种方法的实用性,对背后的理论依据,大量的数学公式,不作讨论(能

算法14---B树

算法14---B树 更详细的讲解见http://www.xuebuyuan.com/509072.html 一棵m阶的B 树 (m叉树)的特性,如下: (1)树中每个结点含有最多含有个孩子,即m满足:ceil(m/2)-1<=n<=m-1. (2)除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子(其中ceil(x)是一个取上限的函数): (3)若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点): 1.1.插入(

数据挖掘算法 Apriori 例子+源码

转自这里 Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法.其核心是基于 两阶段频集思想的递推算法.该关联规则在分类上属于单维.单层.布尔关联规 则.在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集. 由Agrawal等人提出的Apriori是经典的关联规则和频繁项集挖掘算法,围绕着它的改进和实现有大量的文献.该算法是挖掘产生布尔关联规则频繁项目集的经典算法,从其产生到现在对关联规则挖掘方面的研究有着很大的影响. 为了提高频繁项目的挖掘效率,Apriori算法利用了两

算法学习(十二)

1.Integer Factorization(因式分解) 说明:算法的基本定理,任何整数都可以表示为一个或多个素数的乘积,这样的表示是唯一的,例如: 1000 = 2 * 2 * 2 * 5 * 5 * 5 1001 = 7 * 11 * 13 1002 = 2 * 3 * 167 1003 = 17 * 59 1009 = 1009 问题陈述: 您将得到几个数字将它们分解为素数的乘积. 输入数据:第一行中包含分解的整数的数量. 下面的行中包含一个整数(长度不超过13位). 答案:应该包含每一

基于51单片机的万年历(算法实现)

基于51单片机的万年历,用到了单片机独立键盘.数码管.LED灯模块实现. 想要简单还是DS1302好用. 1 /************************************************** 2 3 作者:纟彖氵戋 博客:http://www.cnblogs.com/yllinux/ 4 5 时间:2017年6月7日 6 7 目标:利用单片机独立键盘.数码管.LED灯模块实现万年历(算法实现) 8 9 ************************************

机器学习-聚类算法2

聚类算法就是通过一个固定的准则将若干个数据分成不同的类,而这个准则就是算法,即分类的标准. 1.样本: 数据是这样的,300个数据点: 186.663 202.772 198.676 148.778 143.059 205.835 124.315 209.143 183.409 151.252 186.651 184.617 152.448 213.176 193.86 187.893 147.529 260.705 192.255 195.25 199.348 246.308 193.697

排序算法大集锦_各种排序算法性能比较

对10000个1-10000的随机数进行排序,并显示出运行时间 数组是用以前用VC++&MatLab生成的,比较长...哈哈,感受一下计算机的速度! #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <malloc.h> #include <time.h> int a[10000]={ 5282,330