[PKU] P1002: 487-3279
Description
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” number3-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
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
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
1 |
12<br />4873279<br />ITS-EASY<br />888-4567<br />3-10-10-10<br />888-GLOP<br />TUT-GLOP<br />967-11-11<br />310-GINO<br />F101010<br />888-1200<br />-4-8-7-3-2-7-9-<br />487-3279 |
Sample Output
1 |
310-1010 2<br />487-3279 4<br />888-4567 3 |
Source
Solution:
[#M_ more.. | less.. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import java.util.*; public class P1002 { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<String, Integer>(); int [] d= new int [26]; int tempc=0; int in=2; for(int i=0; i<26; i++){ if(i+'A'=='Q'|| i+'A'=='Z')continue; d[i]=in; tempc++; if(tempc==3){ in++; tempc=0; } } Scanner sc = new Scanner(System.in); int num = Integer.parseInt(sc.nextLine()); StringBuilder sb; String number; for(int i=0; i<num; i++){ sb=new StringBuilder(); String temp = sc.nextLine(); char c; for(int j=0; j<temp.length(); j++){ c=temp.charAt(j); if(Character.isLetter(c)) sb.append(d[c-'A']); else if (Character.isDigit(c)) sb.append(c); else continue; } number=sb.toString(); if(map.containsKey(number)) map.put(number, map.get(number)+1); else map.put(number, 1); } ArrayList<String> ke= new ArrayList<String> (map.keySet()); Collections.sort(ke); boolean flag = false; for(String key : ke){ if(map.get(key)>1){ String fin = key.substring(0, 3)+"-"+key.substring(3); System.out.println(fin+" "+map.get(key)); flag = true; } } if(!flag){ System.out.println("No duplicates."); } } } |