HDU1880

简介: 题意就是根据咒语查功能,根据功能查看是否存在相应咒语,题意简单,不过是道不错的练习题。         下面的都MLE了,听说C++用G++提交才可以AC,否则也MLE;方法很多,不想做了……         方法一:我用Java的HashMap一直MLE,即便由value反查key减少映射数也一样MLE,听说C++的map可以AC。

        题意就是根据咒语查功能,根据功能查看是否存在相应咒语,题意简单,不过是道不错的练习题。

        下面的都MLE了,听说C++用G++提交才可以AC,否则也MLE;方法很多,不想做了……

        方法一:我用Java的HashMap一直MLE,即便由value反查key减少映射数也一样MLE,听说C++的map可以AC。

        方法二:快排+二分

        方法三:Hash方法,用31求幂。

import java.util.*;

//写俩Map
public class HDU1880 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str =null;
        Map<String,String> map1 = new HashMap<String,String>();
        Map<String,String> map2 = new HashMap<String,String>();
        String[] s0;
        while(true) {
            str = sc.nextLine();
            if(str.equals("@END@")) {
                break;
            }
            s0 = str.split(" ", 2);
            str = s0[0].substring(1,s0[0].length()-1);
            map1.put(str,s0[1]);
            map2.put(s0[1], str);
        }
        int n = sc.nextInt();
        for(int i=0; i<n; i++) {
            String s = sc.next();
            s += sc.nextLine();
            if(s.charAt(0)=='[') {
                s = s.substring(1, s.length()-1);
                boolean tag = map1.containsKey(s);
                if(tag) {
                    System.out.println(map1.get(s));
                }else {
                    System.out.println("what?");
                }
            }else {
                boolean tag = map2.containsKey(s);
                if(tag) {
                    System.out.println(map2.get(s));
                }else {
                    System.out.println("what?");
                }
            }
        }
    }
}
import java.util.*;
//一个Map存两次
public class HDU1880 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str =null;
        Map<String,String> map = new HashMap<String,String>();
        String[] s0;
        while(true) {
            str = sc.nextLine();
            if(str.equals("@END@")) {
                break;
            }
            s0 = str.split(" ", 2);
            str = s0[0].substring(1,s0[0].length()-1);
            map.put(str,s0[1]);
            map.put(s0[1], str);
        }
        int n = sc.nextInt();
        for(int i=0; i<n; i++) {
            String s = sc.next();
            s += sc.nextLine();
            if(s.charAt(0)=='[') {
                s = s.substring(1, s.length()-1);
            }
            boolean tag = map.containsKey(s);
            if(tag) {
                System.out.println(map.get(s));
            }else {
                System.out.println("what?");
            }
        }
    }
}
import java.util.*;
//map里反查key
public class HDU1880 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str =null;
        Map<String,String> map = new HashMap<String,String>();
        String[] s0;
        while(true) {
            str = sc.nextLine();
            if(str.equals("@END@")) {
                break;
            }
            s0 = str.split(" ", 2);
            str = s0[0].substring(1,s0[0].length()-1);
            map.put(str,s0[1]);
        }
        int n = sc.nextInt();
        for(int i=0; i<n; i++) {
            String s = sc.next();
            s += sc.nextLine();
            if(s.charAt(0)=='[') {
                s = s.substring(1, s.length()-1);
                boolean tag = map.containsKey(s);
                if(tag) {
                    System.out.println(map.get(s));
                }else {
                    System.out.println("what?");
                }
            }else {
                ArrayList<String> arr = valueGetKey(map,s);
                if(arr.isEmpty()) {
                    System.out.println("what?");
                }else {
                    System.out.println(arr.get(0));
                }
            }
            
        }
    }

    private static ArrayList<String> valueGetKey(Map<String, String> map,String value) {

        Set set = map.entrySet();
        ArrayList<String> arr = new ArrayList<String>();
        Iterator<Map.Entry<String, String> > it = set.iterator();
        while(it.hasNext()) {
            Map.Entry<String, String> entry = (Map.Entry<String, String>)it.next();
            if(entry.getValue().equals(value)) {
                String s = entry.getKey();
                arr.add(s);
            }
        }
        return arr;
    }
}
目录
相关文章
|
缓存 JavaScript 小程序
在HbuilderX中实现微信小程序下蓝牙连接打印机完整实战案例
在HbuilderX中实现微信小程序下蓝牙连接打印机完整实战案例
在HbuilderX中实现微信小程序下蓝牙连接打印机完整实战案例
|
3月前
|
弹性计算 安全 Linux
阿里云免费云服务器及学生云服务器申请教程指南
阿里云继续推出免费学生云服务器与免费试用云服务器,其中学生云服务器最长可免费7个月(1个月首次领用+6个月免费续领),免费试用云服务器分为个人免费云服务器和企业免费云服务器,最长免费试用时长是3个月。下面小编来介绍一下阿里云免费云服务器及学生云服务器的申请教程。
|
8月前
|
存储 Java 容器
偏向锁
偏向锁是JVM为提升单线程环境下锁性能而引入的优化机制。其核心思想是将锁偏向首个获取它的线程,避免无竞争时的同步开销,从而提高执行效率。适用于锁由同一线程多次获取、无并发竞争的场景。一旦出现多线程竞争,偏向锁会撤销并升级为更高级别的锁。合理使用可显著提升性能,但在高并发环境下需谨慎配置。
161 0
|
4月前
|
NoSQL 测试技术 Redis
【赵渝强老师】Redis数据的迁移
Redis提供move、dump+restore和migrate三种方式实现数据迁移。move用于库内迁移,dump+restore跨实例传输,migrate则原子性地完成键的迁移与删除,支持多键批量操作,提升效率。
237 5
|
敏捷开发 测试技术 BI
禅道:从安装到使用,一篇文章带你全面了解
禅道:从安装到使用,一篇文章带你全面了解
3504 3
|
人工智能 JSON 文字识别
通义两大模型,正式开源!
通义两大模型,正式开源!
|
12月前
|
人工智能 自然语言处理 算法
《解锁鸿蒙AI开发:探秘必备集成开发环境》
在鸿蒙系统与人工智能融合的创新浪潮中,选择合适的开发工具至关重要。DevEco Studio作为华为官方的全能开发利器,基于IntelliJ IDEA,提供丰富的项目模板、智能代码补全和强大的调试优化功能,助力开发者高效完成应用开发。DevEco CodeGenie通过AI赋能,以智能知识问答和代码生成功能显著提升开发效率,减少重复性工作。而Visual Studio Code凭借其轻量灵活的特点和丰富的插件生态,为鸿蒙开发提供了更多选择。三者各具优势,开发者可根据需求选择最适合的工具,共同推动鸿蒙生态的繁荣发展。
497 0
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件基础与进阶
【10月更文挑战第5天】在Android应用开发中,自定义控件是提升用户体验和界面个性化的重要手段。本文将通过浅显易懂的语言和实例,引导你了解自定义控件的基本概念、创建流程以及高级应用技巧,帮助你在开发过程中更好地掌握自定义控件的使用和优化。
313 10
|
Linux 数据安全/隐私保护 iOS开发
从入门到精通:Python 系统编程中的跨平台兼容性攻略
【8月更文挑战第6天】在编程领域,Python 以简洁强大著称。系统编程时,确保代码能在不同平台(如 Windows、Linux 和 macOS)上良好运行至关重要。本文探讨 Python 跨平台兼容性的关键点,帮助理解各系统间的差异,例如文件路径、权限管理和进程控制的不同。通过使用 `os` 和 `subprocess` 模块,可以编写出既灵活又兼容的代码。例如,使用 `os.path.join()` 处理路径差异,`subprocess.run()` 进行进程管理。此外,还需关注环境变量和权限管理等方面的平台特性。掌握这些技巧,您将能更自信地开发跨平台的系统程序。
724 0
|
存储 虚拟化 索引
虚拟机数据恢复-虚拟机还原快照原理和误还原快照的数据恢复方案
由一台物理服务器迁移到ESXI上的虚拟机,虚拟机迁移完成后做了一个快照,该ESXI上面一共运行了数十台虚拟机。某天工作人员不小心将快照进行了还原,虚拟机内的数据还原到了数年前刚迁移过来时的状态,迁移过来后的这几年更新的数据全部被删除。
虚拟机数据恢复-虚拟机还原快照原理和误还原快照的数据恢复方案