`
贝壳水母
  • 浏览: 149193 次
  • 性别: 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

    根据题目描述,我们可以总结出以下知识点: ### 一、图论基础 #### 1....- **图(Graph)**:是由顶点(Vertex)和边(Edge)组成的数学结构,通常表示为G=(V,E),其中V是顶点集,E是边集。 - **有向图(Directed Graph)**与...

    CSUOJ,264个问题的正确代码

    在Problem1002中,涉及到对字符串的处理与比较,主要采用了C语言中的标准库函数`scanf`和`strlen`来读取字符串并获取其长度。关键代码如下: ```c while (scanf("%s", s) != EOF) { int len = strlen(s); //... }...

    acm比赛试题

    Problem 1002 本题的标题是“Easier DoneThan Said?”,它是一道算法设计题目,要求解决一个简单的算法问题。该题目考察了算法设计和实现的知识点,需要使用基本的算法设计方法来解决问题。 知识点: 1. 算法设计...

    poj1002代码

    【标题】"poj1002代码"指的是在编程竞赛平台POJ(Problem Set of Peking University)上的编号为1002的题目所对应的解决方案代码。这通常是一个编程挑战,参与者需要用特定的编程语言编写程序来解决该问题。在本例中...

    杭电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 ...

    TSP-数据集

    **旅行商问题(Travelling Salesman Problem, TSP)** 是一个经典的组合优化问题,其目标是在遍历一系列城市并返回起点的过程中找到最短的可能路径。在TSP中,一个销售员需要访问每个城市一次,并且最后返回出发点,...

    北大ACM题目分类

    3. **题目ID:** [1002](http://acm.pku.edu.cn/JudgeOnline/problem?id=1002) - **题目类型:** 模拟题 - **知识点:** 按照题目要求进行编程实现 - **解析:** 模拟题是指不需要复杂算法,只需严格按照题目要求编写...

    北大ACM···············

    2. **poj题目分类.docx**:POJ(Problemset of Jilin University)是吉林大学的一个在线编程练习平台,经常被ACM选手用来训练。这份文档可能将POJ上的题目按照难度或者主题进行了分类,有助于系统性地学习和训练。 ...

    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...

    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...

    杭电的答案

    根据给定文件的信息,我们可以总结出杭电ACM竞赛中的三个问题:1000-A+B Problem、1001-Sum Problem 和1002-A+B Problem II 的相关知识点。 ### 杭电ACM 1000 - A+B Problem **题目描述**: 计算两个整数 A 和 B ...

Global site tag (gtag.js) - Google Analytics