题目:

你有一片菜地,种着M株植物,每株植物的位置可以用一个二维坐标来表示。

你的地里闯进了一只超级地鼠,这只地鼠使出了瞬间绝技在地里到处乱窜。幸运的是,

你统计出了前段时间内,地鼠在乱窜过程中出现过的N个位置(N个二维坐标,位置可能重复).

你希望统计一下地鼠在哪里出现的次数最多,然后拿起锤子向那个地方砸去,毕竟这样砸中的

几率最大。但有一个前提,你不想砸到植物所在的位置。

输入

第一行两个整数N,M

接下来N行每行两个整数,表示地鼠出现过的位置.

接下来M行每行两个整数,表示植物的位置。

输出

一个位置,由两个整数和一个空格组成。

如果答案不唯一,输出其中横坐标之和(x+y)最小的,若还不唯一,

输出其中横坐标(x)最小的。

示例1

3 1

1 2

2 2

1 2

1 2

说明: 地鼠出现过3次,分别是(1,2),(2,2)和(1,2)三个坐标。其中在(1,2)出现过2次

在(2,2)出现过1次.本来你应该砸(1,2)。但(1,2)种着一株植物。

所以(2,2)是不砸植物的前提下,砸到地鼠几率最高的位置。

输出:

2 2

数据范围

1<=N , M<=1000 ,坐标范围在0 ~ 10,000,000之间。

分析:

1.用一个hash表来统计地鼠出现过的次数,key为坐标,value为次数。

2.用一个hashset来记录植物的坐标,做为过滤用。

3.创建一个Node节点,主要是用来排序,node的属性是x横坐标,y纵坐标,c次数。

排序规则 (1) c的大小 (2)x+y的值 (3)x的值。

4 . 排序可以用平衡树 TreeSet,或者大堆 PriorityQueue。

题解:

import java.io.*;
import java.util.*;public class Main{static class Node implements Comparable<Node>{int x;int y;int c;public Node(int x,int y,int c){this.x = x;this.y = y;this.c = c;}@Overridepublic int compareTo(Node o){if(this.c == o.c){if(this.x + this.y == o.x+ o.y){return o.x - this.x;}return o.x + o.y - this.x - this.y;}return this.c - o.c;}}public static void main(String[] args){Scanner scanner = new Scanner(new BufferedInputStream(System.in));int n = scanner.nextInt();int m = scanner.nextInt();int[][] mice = new int[n][2];for(int i=0;i<n;i++){mice[i][0] = scanner.nextInt();mice[i][1] = scanner.nextInt();}int[][] flower = new int[m][2];for(int i=0;i<m;i++){flower[i][0] = scanner.nextInt();flower[i][1] = scanner.nextInt();}Map<String,Integer> miceCounter = new HashMap<>();for(int i=0;i<n;i++){String key = mice[i][0] + "_" + mice[i][1];miceCounter.put(key,miceCounter.getOrDefault(key,0)+1);}Set<String> flowerSet = new HashSet<>();for(int i=0;i<m;i++){String key = flower[i][0] + "_" + flower[i][1];if(!flowerSet.contains(key)){flowerSet.add(key);}}TreeSet<Node> treeset = new TreeSet<>();for(int i=0;i<n;i++){String key = mice[i][0] + "_" + mice[i][1];int count = miceCounter.getOrDefault(key,0);if(flowerSet.contains(key)){continue;}treeset.add(new Node(mice[i][0],mice[i][1],count));}Node node = treeset.last();System.out.print(node.x + " "+node.y);}
}

地鼠与植物,hash + 平衡树相关推荐

  1. C++ __gnu_pbds(平板电视)超详细教程(C++内置的平衡树,字典树,hash)

    整理的算法模板合集: ACM模板 目录 一.平衡树 例题:luogu P3369 [模板]普通平衡树 1. `rb_tree_tag`版 2. `splay_tree_tag`版 功能不够?自己添加! ...

  2. C++ __gnu_pbds(hash,可并堆,平衡树)

    pb_ds 是GNU-C++自带的一个C++的扩展库,其中实现了很多数据结构,比STL里面的功能更强大 #include<ext/pb_ds/assoc_container.hpp> #i ...

  3. 全网把Map中的hash()分析的最透彻的文章,别无二家。

    你知道HashMap中hash方法的具体实现吗?你知道HashTable.ConcurrentHashMap中hash方法的实现以及原因吗?你知道为什么要这么实现吗?你知道为什么JDK 7和JDK 8 ...

  4. 一个植物转录组项目的实战

    一个植物转录组项目的实战 Posted on 2017年11月2日 其实这个植物是拟南芥,所以跟人类研究的数据处理大同小异. 转录组 转录组测序的研究对象为特定细胞在某一功能状态下所能转录出来的所有 ...

  5. 面试高频题:Hash一致性算法是如何解决数据倾斜问题的?

    一致性Hash是一种特殊的Hash算法,由于其均衡性.持久性的映射特点,被广泛的应用于负载均衡领域,如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案. 本文将介绍一致性H ...

  6. 基于Hash算法的高维数据的最近邻检索

    一.摘要 最紧邻检索:一种树基于树结构,一种是基于hash a.随机投影算法,需要产生很多哈希表,才能提高性能. b.基于学习的哈希算法在哈希编码较短时候性能不错,但是增加编码长度并不能显著提高性能. ...

  7. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2271  Solved: 935 [Submit][St ...

  8. 一致性 Hash 在负载均衡中的应用

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 转自:Mar ...

  9. [POI2008] Poc (原名 Trians) Treap+Hash

    这个题和千山鸟飞绝体现出了一种用平衡树解决动态集合问题,主要套路就是蜜汁标记. 这个题我一开始用替罪羊树搞了一下对了28个点,后来我换成了Treap一搞对了14个点,再后来发现被卡了Hash我竟然在自 ...

最新文章

  1. 清华大学:2021元宇宙发展研究报告
  2. ListView通过自定义的Adapter实现异步下载显示网络图片
  3. SPF Tarjan算法求无向图割点(关节点)入门题
  4. 现在不坚持,以后都会放弃
  5. STM32 SPI的使用
  6. 如何选择你最合适的linux系统
  7. python可以神奇的做什么_可以用 Python 编程语言做哪些神奇好玩的事情?
  8. ElasticSearch 状态查询Cat接口
  9. 计算机毕业设计Python+djang的药物管理系统
  10. Ubuntu16.04 php5安装失败解决方案
  11. 八爪鱼采集ajax表格,怎么采集八爪鱼采集器单网页表格信息
  12. 对于初学者的JavaScript 教程
  13. 无线网和网吧服务器,网吧网络使用无线局域网的几个优势所在
  14. android 多开app store,原来 iOS 也有双开助手,还是上架了苹果官方 App Store 的
  15. Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】...
  16. Java中关于子类重写父类方法的坑
  17. Bootstrap整体架构
  18. 农夫过河算法java,Java农夫过河问题的继承与多态实现详解
  19. UTC、CST、GMT等时区详解
  20. yishaadmin,yishaadmin修改数据后回到起始页的解决办法,保持在修改前的页码,分页组件在修改数据后不返回到第一页

热门文章

  1. 【漏洞通告】Gitlab存在多个高危漏洞
  2. 我不看好中移动充当4G急先锋
  3. 【NOIP2012提高组】国王游戏
  4. 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)
  5. 诺禾-心源性猝死基因分型研究
  6. dormer natalie_【图片】[Natalie Dormer]娜塔莉·多默尔【娜塔莉多默尔吧】_百度贴吧...
  7. sql注入漏洞与如何解决
  8. 从工地转行软件测试,拿下13k+年终奖是种什么体验?
  9. Multisim 14.0安装教程---图文讲解
  10. [paper share]KDD15 - Interpreting Advertiser Intent in Sponsored Search