电话号码问题(我保证很难)
这道题主要问题是内存限制和运行时间问题,是我们上机的原题,是不是很有难度?哪位高手能解决一下啊!推荐看《编程珠玑》
背景
商业单位需要容易记忆的电话号码,有一些方法可以让电话号码变得更容易记忆。譬如,可以把电话号码写成单词或短语,如 TUT-GLOP 可以代表滑铁卢大学的电话。有时仅仅是把号码的一部分写成单词,如打 310-GINO 便可向 GINO 比萨饼店定购比萨。另一种让电话号码容易记忆的方法是将数字用一种容易记的方式组合起来,譬如 3-10-10-10 也可以代表 GINO 比萨饼店。
电话号码的标准形式是七位十进制数字,在它的第三位和第四位之间用连字符连接(例如:888-1200)。电话的键盘提供了字符于数字之间的映射关系,如下所示:
2 |
A、B和C |
3 |
D、E和F |
4 |
G、H和I |
5 |
J、K和L |
6 |
M、N和O |
7 |
P、R和S |
8 |
T、U和V |
9 |
W、X和Y |
Q 和 Z 没有映射到键盘,而连字符不需要被拨打并且可以根据需要添加和删除。TUT-GLOP 的标准形式是 888-4567,310-GINO 的标准形式是310-4466,3-10-10-10的标准形式也是 310-1010。
如果两个电话号码有相同的标准形式,那么这两个电话号码是相同的。
你所在的公司正在编辑一本当地商业单位的电话簿,作为质量控制流程的一部分,你需要确认在该电话簿中没有两个(或两个以上的)商业单位使用相同的电话号码。
输入
一次输入为一个样例。输入的第一行用一个正整数指明了电话簿中电话号码的数目 n(最大为1,000,000)。后面输入 n 个电话号码,每个号码一行。每个号码由一组包含十进制数、大写字母(Q、Z 除外)和连字符的字符串组成。确切地说,字符串中的七个字符是数字和字母。你可以假设输入中可能重复的电话号码不超过 10,000 个,且每个电话号码重复的次数不超过 100 次。
输出
对每一个在电话簿中以任何形式出现一次以上的电话号码,生成一行输出。这一行应以标准形式给出电话号码,其后跟随一个空格,空格后跟随电话号码在电话簿中出现的次数。所有重复的电话号码输出行应以号码的升序排列。如果在输入中没有重复的电话号码,则输出:“No duplication”。 注意
你所编写的程序只是一个大系统的一部分,它的运行速度应该非常快且应当不占用过多的内存。本题内存限制为 1.5M。
测试用例 0 | ||||||||||||||||||||||||||||||||||||||||
测试输入 |
| |||||||||||||||||||||||||||||||||||||||
期待的输出 |
| |||||||||||||||||||||||||||||||||||||||
时间限制 | 1秒 | |||||||||||||||||||||||||||||||||||||||
内存限制 | 1536KB |