`
200830740306
  • 浏览: 109418 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

poj1002 郁闷的电话号码

阅读更多
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

/**
 * poj1002
 * 题意就是输入几组字符串,按照给出的形式转换为统一格式,
 * 然后输出出现多于一次的字符串出现的次数,输出时按照字典顺序排列
 * 测试过这样的数据量
 * 10000 18s
 * 20000 116s
 * 50000 等了4分多钟没结果
 * 一直过不了,有时是re,有时是超时
 * 改成DataInputStream居然过了,太兴奋了!!!!!!!
 * 太无语了。。。。痛苦了好久啊。。。。
 * @author NC
 */
public class Main {

    public static char getNum(char c) {
        //注意对于数字字符要用'',如果没有的话,虽然也会自转,但是只当作对应0到9的ascii码
        if (Character.isDigit(c)) {
            return c;
        }
        if (c == 'A' || c == 'B' || c == 'C') {
            return '2';
        }
        if (c == 'D' || c == 'E' || c == 'F') {
            return '3';
        }
        if (c == 'G' || c == 'H' || c == 'I') {
            return '4';
        }
        if (c == 'J' || c == 'K' || c == 'L') {
            return '5';
        }
        if (c == 'M' || c == 'N' || c == 'O') {
            return '6';
        }
        if (c == 'P' || c == 'R' || c == 'S') {
            return '7';
        }
        if (c == 'T' || c == 'U' || c == 'V') {
            return '8';
        }
        if (c == 'W' || c == 'X' || c == 'Y') {
            return '9';
        }
        return '#';
    }

    public static void main(String[] args) throws IOException {
//        Scanner scan = new Scanner(new BufferedInputStream(System.in));
        DataInputStream scan = new DataInputStream(new BufferedInputStream(System.in));
//      if (scan.hasNext()) {
        Map<String, Integer> tm = new TreeMap();
        //   int n = Integer.parseInt(scan.nextLine().trim());
        int n = Integer.parseInt(scan.readLine().trim());//方法虽然过时了,但却更快
        for (int i = 0; i < n; i++) {
//                String s = scan.nextLine().replace("-", "");
            String s = scan.readLine().replace("-", "");
            StringBuilder sb = new StringBuilder();
            //转字符电话号码为数字电话号码
            for (int k = 0; k < s.length(); k++) {
                char c = getNum(s.charAt(k));
                if (Character.isDigit(c)) {
                    sb.append(c);
                }
            }
            String result = sb.toString().substring(0, 3) + '-' + sb.toString().substring(3);
            //统计字符串出现的次数,因为要求是字典顺序,故选用TreeMap
            if (tm.containsKey(result)) {
                int count = tm.get(result) + 1;
                tm.put(result, count);
            } else {
                tm.put(result, 1);
            }
        }
        // System.out.println("111");
        Set se = tm.keySet();
        Iterator it = se.iterator();
        boolean flag = false;
        while (it.hasNext()) {
            String s = it.next().toString();
            int count = tm.get(s);
            if (count > 1) {
                flag = true;
                System.out.println(s + " " + count);
            }
        }
        if (!flag) {
            System.out.println("No duplicates. ");
        }
    }
    //  }
}
分享到:
评论

相关推荐

    POJ 1002 487-3279解题报告

    ### POJ 1002 487-3279 解题报告 #### 题目背景与概述 本题目属于电话号码处理问题,主要考查字符串处理、哈希表应用以及排序等相关算法知识。题目描述了一个有趣的场景:为了方便记忆,企业往往希望自己的电话...

    POJ 1002 487-3279 电话号码查重源代码

    如题所示,亲测可用。电话号码查重,不会的同学可以参考下,会做的同学可以给挑挑毛病!大家以代码会友!

    poj_1002_487.rar_poj 1002

    【标题】"poj_1002_487.rar_poj 1002"指的是北京大学在线编程平台上的第1002道题目,这道题目涉及到计算机科学中的算法设计与实现,特别是字符串处理和哈希映射。在这个问题中,我们需要编写一个程序,该程序能够...

    POJ1002-487-3279【Hash+Qsort】

    标题中的"POJ1002-487-3279【Hash+Qsort】"是指一个编程挑战题目,通常在在线编程平台上出现,比如北京大学的Peking Online Judge (POJ)。这个题目结合了哈希表(Hash)和快速排序(Qsort)两种算法来解决问题。哈希...

    ACM POJ 1002题解摘要

    ### ACM POJ 1002题解摘要 #### 题目背景与目标 本题目来自POJ(Pacific OpenJudge)平台上的一个经典问题,编号为1002。题目要求解决的是电话号码标准化的问题,即如何将各种形式的电话号码转换成统一的标准格式...

    ACM 编程大赛 北大网 poj1002

    ### ACM编程大赛北大网poj1002知识点解析 #### 题目背景与概述 本题目来源于POJ(Peking University Online Judge)在线评测系统中的第1002号问题,是一道典型的字符串处理与排序算法结合的题目。题目要求对输入的...

    POJ 1002 487-3279 telephone numbers

    输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了Q和Z)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。 ...

    方便记忆的电话号码

    一道简单的poj题目 适合于新手 排序问题

    算法分类以及POJ题目分类

    2. 1002 487-3279:电话号码的转换,了解数字系统和位运算。 3. 1003 Hangover:简单的模拟醉酒状态,注意条件分支。 4. 2301 Beat the Spread!: 模拟体育比赛的赌注,理解概率和比较。 5. 2304 Combination Lock:...

    POJ各题算法分类和题目推荐 ACM必看

    * 1002 487-3279:本题目要求使用编程语言来模拟电话号码的格式化。 * 1003 Hangover:本题目要求使用编程语言来模拟酒吧的营业情况。 * 1701 Dissatisfying Lift:本题目要求使用编程语言来模拟电梯的运行情况。 * ...

    OSRS_GE_STOCK_TICKER

    POJ版本要求用户知道商品ID才能搜索具有简单的项目库构建能力,但是即使它是多线程的,也可能会非常耗时几乎完全是手动系统,但具有刻度功能我不打算更新/修复/增强该版本进行中: Vertx Java后端取材成为需求也许...

Global site tag (gtag.js) - Google Analytics