`
贝壳水母
  • 浏览: 146098 次
  • 性别: Icon_minigender_1
  • 来自: 广州中低收入人群
社区版块
存档分类
最新评论

Problem1002

    博客分类:
  • POJ
阅读更多
/**
 * 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
 */


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//TreeMap为有序集合
		Map map = new TreeMap();
		try {
			int i = Integer.parseInt(br.readLine());
			while (i != 0) {
				String s = br.readLine().trim();
				//将字符串转换为标准格式电话号码
				s = method(s);
				//如果是合法的电话号码
				if (s.length() == 8) {
					//计数
					if (map.containsKey(s)) {
						map.put(s, Integer.parseInt(map.get(s).toString()) + 1);
					} else {
						map.put(s, 1);
					}
				}
				i--;
			}
			Iterator it = map.keySet().iterator();
			boolean flag = true;
			while (it.hasNext()) {
				String key = it.next().toString();
				String value = map.get(key).toString();
				//每个号码至少出现1次,因此把其他次数的电话号码输出即可
				if ("1".equals(value))
					;
				else {
					System.out.println(key + " " + value);
					flag = false;
				}
			}
			if (flag) {
				System.out.println("No duplicates.");
			}
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	//一个把号码转成标准格式的方法,这里挺费劲的,估计有挺大优化空间 =_=
	public static String method(String s) {
		s = s.replaceAll("-", "");
		StringBuffer sb = new StringBuffer(s);
		for (int i = 0; i < sb.length(); i++) {
			switch (sb.charAt(i)) {
			case 'A':
			case 'B':
			case 'C':
				sb.setCharAt(i, (char) 50);
				break;
			case 'D':
			case 'E':
			case 'F':
				sb.setCharAt(i, (char) 51);
				break;
			case 'G':
			case 'H':
			case 'I':
				sb.setCharAt(i, (char) 52);
				break;
			case 'J':
			case 'K':
			case 'L':
				sb.setCharAt(i, (char) 53);
				break;
			case 'M':
			case 'N':
			case 'O':
				sb.setCharAt(i, (char) 54);
				break;
			case 'P':
			case 'R':
			case 'S':
				sb.setCharAt(i, (char) 55);
				break;
			case 'T':
			case 'U':
			case 'V':
				sb.setCharAt(i, (char) 56);
				break;
			case 'W':
			case 'X':
			case 'Y':
				sb.setCharAt(i, (char) 57);
				break;
			default:
				;
			}
		}
		return sb.insert(3, "-").toString();
	}
}



题目大意:一组电话号码可以有多种表示方法,要求把那些个乱七八糟的号码整理下,然后把出现次数超过2的以标准格式打印出来,即3个号码+一杠+后4个号码
收获:TreeMap —— 一个自动排序的集合,只管往里丢东西就是了,它会排好顺序等着出来的
不过这里,直接用这个对象,而且最终输出的时候感觉也挺复杂的,估计也是能优化的地方
分享到:
评论

相关推荐

    Problem 1002

    HDOJ Problem 1001 C++版

    Problem - 1002.pdf

    2020 CCPC第二题!

    ACM杭电1002 C++程序

    ACM杭电Problem 1002 C++程序 大数相加问题,注意输出的限制

    杭电ACM 1002

    Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1) which ...

    题目1002:Grading

    One way is to assign each exam problem to 3 independent experts. If they do not agree to each other, a judge is invited to make the final decision. Now you are asked to write a program to help this ...

    Big Number 1002(程序竞赛题)

    Problem Description As we know, Big Number is always troublesome. But it's really important in our ACM. And today, your task is to write a program to calculate A mod B. To make the problem easier, I ...

    Introduction to Algorithms, 3rd edtion

    32.4 The Knuth-Morris-Pratt algorithm 1002 33 Computational Geometry 1014 33.1 Line-segment properties 1015 33.2 Determining whether any pair of segments intersects 1021 33.3 Finding the convex hull ...

    算法导论 第三版 英文原版 高清文字版

    32.4 The Knuth-Morris-Pratt algorithm 1002 33 Computational Geometry 1014 33.1 Line-segment properties 1015 33.2 Determining whether any pair of segments intersects 1021 33.3 Finding the convex hull ...

    Dreamweaver CS4 黄金插件10-02

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    算法导论-introduction to algrithms 3rd edition

    32.4 The Knuth-Morris-Pratt algorithm 1002 33 Computational Geometry 1014 33.1 Line-segment properties 1015 33.2 Determining whether any pair of segments intersects 1021 33.3 Finding the convex hull ...

    Dreamweaver CS4 黄金插件10-05

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    Dreamweaver CS4 黄金插件10-03

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    Dreamweaver CS4 黄金插件10-04

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    Dreamweaver CS4 黄金插件10-08

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    Dreamweaver CS4 黄金插件10-06

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    Dreamweaver CS4 黄金插件10-07

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    Dreamweaver CS4 黄金插件10-1

    192. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 193. Softery G-Force Menu V1.0.0 & Menus UI V1.3.0 & 194. IE Flash Problem Solver V1.0.4 For Adobe Dreamweaver 195. Softery Glassy Menu V1.0.0...

    2018-multi-school-training:我的2018年多学校解决方案

    2018年-多校培训创造新一轮运行脚本为python create_round.py &lt; round&gt; &lt; problem&gt; 那么您将获得一个名为“ Round ”的文件夹,其中的&lt;problem&gt; cpp文件名为1001.cpp,1002.cpp,... 调用template函数以预处理带有...

    leetcode中国-Homo-sapiens-ACM-Learning:智人-ACM-学习

    Problem C++ 1001 1002 1003 1004 1006 1007 专题分类 (一)简单搜索 ID Problem C++ Source 1 HDU 2553 (精简版) 2 HDU 1312 3 POJ 3984 4 POJ 2251 5 POJ 3278 6 POJ 3279 7 ZOJ 1002 8 POJ 1321 9 HDU 1241 (二)树...

Global site tag (gtag.js) - Google Analytics