文档章节

POJ 1002 487-3279

圣洁之子
 圣洁之子
发布于 2014/08/15 06:36
字数 899
阅读 26
收藏 0

487-3279

Time Limit: 2000MS Memory Limit: 65536K

Total Submissions: 242236 Accepted: 42954

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. 

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

Source


East Central North America 1999

import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main {
	static char toDigit(char c){
		switch(c){
		case 'A':
		case 'B':
		case 'C':
			return '2';
		case 'D':
		case 'E':
		case 'F':
			return '3';
		case 'G':
		case 'H':
		case 'I':
			return '4';
		case 'J':
		case 'K':
		case 'L':
			return '5';
		case 'M':
		case 'N':
		case 'O':
			return '6';
		case 'P':
		case 'R':
		case 'S':
			return '7';
		case 'T':
		case 'U':
		case 'V':
			return '8';
		case 'W':
		case 'X':
		case 'Y':
			return '9';
		default:
			return c;
		}
	}
	//此方法使用字符字符数组,自己处理连字符,大小写等,通过了POJ在线测试
	static String format(char[] a){
		char[] re = new char[8];
		int index = 0;
		for(int i=0; i<a.length; ++i){
			if(a[i] != '-'){
				if(a[i] >= '1' && a[i] <= '9'){
					re[index++] = a[i];
				}else if(a[i] >= 'a' && a[i] <= 'b') {
					re[index++] = (char)(a[i] - 32);
				}else{
					re[index++] = toDigit(a[i]);
				}
			}
		}
		for(int i=6; i>=3; --i){
			re[i+1] = re[i];
		}
		re[3]= '-';
		return String.valueOf(re);
	}
	static boolean noDuplicates(Map<String, Integer> map){
		Iterator<String> it = map.keySet().iterator();
		while(it.hasNext()){
			String key = it.next();
			Integer value = map.get(key);
			if(value.intValue() != 1){
				return false;
			}
		}
		return true;
	}
	public static void main(String[] args) {
		Map<String,Integer> map = new HashMap<String,Integer>();
		Scanner in = new Scanner(new BufferedInputStream(System.in));
		int n = Integer.valueOf(in.nextLine());
		String phone = null;
		for(int i=0; i<n; ++i){
			phone = format(in.nextLine().toCharArray());
			if(map.containsKey(phone)){
				map.put(phone, map.get(phone) + 1);
			}else{
				map.put(phone, 1);
			}
		}
		in.close();
		if(noDuplicates(map)){
			System.out.println("No duplicates.");
		}else{
			Iterator<String> it = map.keySet().iterator();
			List<String> list = new ArrayList<String>();
			while(it.hasNext()){
				list.add(it.next());
			}
			Collections.sort(list);
			for(int i=0; i<list.size(); ++i){
				Integer value = map.get(list.get(i));
				if(value.intValue() != 1){
					System.out.println(list.get(i) + " " + value);
				}
			}
		}
	}
}
//使用此方法,由于太多字符串操作,导致在POJ上运行超出限定时间
	static String format(String input){
		input = input.replaceAll("-", "");
		input = input.toUpperCase();
		char[] arr = input.toCharArray();
		for(int i=0; i<arr.length; ++i){
			arr[i] = toDigit(arr[i]);
		}
		input = String.valueOf(arr);
		String result = input.substring(0, 3) + "-" + input.substring(3);
		
		return result;
	}


© 著作权归作者所有

圣洁之子
粉丝 10
博文 402
码字总数 124050
作品 0
深圳
后端工程师
私信 提问
poj 1002 487-3279

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

locusxt
2013/11/25
305
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
POJ ~ 1753 ~ Flip Game (二进制枚举 + 模拟)

题意:给你一个4*4的棋盘,'w'表示白子,'b'表示黑子。每次可以将一颗棋子及他的上下左右变为相反的颜色,通过这种操作,我们要把所有的子全变成一个颜色,问最小步数。如果不能将所有的子变...

zscdst
2018/04/08
0
0
【POJ - 3279】Fliptile(经典翻转问题)

-->Fliptile 直接中文翻译: Descriptions: 给你一个01矩阵,矩阵大小为M x N。(1 <= M , N <= 15) 每次操作选择一个格子,使得该格子与上下左右四个格子的值翻转。 至少多少次操作可以使得...

Sky丨Star
07/16
0
0
myEclipse报错异常: Servlet.service() for servlet jsp threw exception求解决

各位高手本人写的一个项目中,在运行时候,出现异常,由于本人是刚刚学习javaee,我已经测试过,排除在数据库(MySql)、dao层、service层的错误。而在servlet层的测试中我已经检测到没什么问...

wallacefw
2013/04/08
7.3K
4

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
10分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
17分钟前
2
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
24分钟前
2
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
26分钟前
2
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
27分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部