Similar Pair _ HackerRank

原创 2015年01月18日 05:44:56

Hacker rank真的比leetcode 难了不止一个等级。。


这题有点巧妙。。深度搜索每条路径,然后枚举,基本很多人都想的出来,但是关键在于这样肯定超时。巧妙之处在于要给每条路径建立一个线段树来加速查询,每次similar查询复杂度从O(h)变成O(lgh)。。


犯了两个错误

(1)要用long来存储线段树,以及可能的similar pairs。

 (2)值减去T可能小于0,值加上T也有可能大于n。


import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;

public class Solution {
	
	public static LinkedList<Integer>[] nodes = new LinkedList[100002];
	static int n , t, root;

	

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
    	
    	Scanner scan = new Scanner(System.in);
    	
    	n = scan.nextInt();
    	t = scan.nextInt();
    	long[] stree = new long[4*n+1];
    	
    	for(int i=1;i<=n;i++)
    		nodes[i] = new LinkedList<Integer>();
    	
    	int[] idegree = new int[n+1];
    	
    	for(int i=1;i<n;i++)
    	{
    		int par = scan.nextInt();
    		int chd = scan.nextInt();
    		
    		nodes[par].addFirst(chd);
    		idegree[chd]++;
    	}
    	
    	for(int i=1;i<=n;i++)
    	{
    		if(idegree[i] == 0)
    		{
    			root = i;
    			break;
    		}
    	}
    	
    	long[] pairs = new long[1];
    	
    	depthSearch(root,stree,pairs);
    	
    	System.out.println(pairs[0]);
    	
    }
    
    public static void depthSearch(int nodeval, long[] stree, long[] pairs){
    	
    	int min = (nodeval - t < 1) ? 1 : nodeval - t;
    	int max = (nodeval + t > n) ? n : nodeval + t;
    	
    	pairs[0] += query(stree,1,1,n,min, max);
    	
    	updateTree(stree,1,1,n,nodeval,1);
    	
    	for(int chd : nodes[nodeval]){
    		depthSearch(chd, stree, pairs);
    	}
    	
    	updateTree(stree,1,1,n,nodeval,-1);
    }
    
    
    public static void updateTree(long[] tree, int node,int tl, int tr, int val, long opt){
    		if(val < tl || val > tr || tl > tr)
    			return;
    		
    		tree[node] += opt;
    		
    		int m = (tl + tr) >> 1;
    		
    		if(tl == tr)
    			return;
    		else if(val <= m)
    			updateTree(tree,node<<1,tl,m,val,opt);
    		else
    			updateTree(tree,node<<1|1,m+1,tr,val,opt);
    }
   
    
    public static long query(long[] tree, int node, int tl, int tr, int min, int max){
    	
    	if(max < tl || min > tr)
    		return 0;
    	
    	else if(max == tr && min == tl)
    		return tree[node];
    	
    	else{
    		int mid = (tl + tr) >> 1;
    		int lmax = (mid < max) ? mid : max;
    		int rmin = (min > mid) ? min : mid + 1;
    		return query(tree,node<<1, tl, mid, min, lmax) + query(tree,node<<1|1, mid+1, tr, rmin, max);
    	}
    	
    }
}


昨日参加hackerrank一比赛总结

昨天第一次参加hackerrank的某比赛,从中午11点做到了晚上12点,最后太累,在比赛结束前一小时睡觉去了。完全通过了前两道题,第三题对于某句话始终未能正确理解,所以该题大部分test case不...
  • bxprog
  • bxprog
  • 2016年01月31日 08:20
  • 1048

hackerRank上的一道题,如何更快

Project Euler #179: Consecutive positive divisors 下面是代码 import java.io.*; import java.util.*; impor...
  • qq_35039122
  • qq_35039122
  • 2017年06月29日 12:17
  • 138

使用 Similar By References 制作“猜你喜欢”列表

网页内容越来越丰富,在页面上显示一些与当前页面相关的“猜你喜欢”或“相关内容”已经是各类网站的共同需求。比如在网上买书时,其在页面下方大多也会推荐一些相似的书籍。根据网站结构的异同,在 Drupal ...
  • zhuiqingfen
  • zhuiqingfen
  • 2016年01月29日 14:21
  • 147

xtu-1269 Similar Subsequence(dp+树状数组)

Similar Subsequence Accepted : 17   Submit : 73 Time Limit : 10000 MS   Memory Limit...
  • qq_31759205
  • qq_31759205
  • 2017年05月17日 21:38
  • 71

Gym - 100623J -similar-hdu4389

这道题的意思非常简单,就是一个数,如果他除以他各个位数之和为0,即他能被他的位数之和整除,那么他就是要求的目标数,给一定一个n,问从0到n有多少目标数。 一看就是数位dp,不过我不会用递推写,只能借...
  • qq_35781950
  • qq_35781950
  • 2017年03月31日 23:31
  • 118

《 Mining of Massive Datasets》学习笔记之 Finding Similar Items

本文总结《 Mining of Massive Datasets》一书中第三章所描述的Finding Similar Items 问题及其相关算法。...
  • MiMicoa
  • MiMicoa
  • 2016年04月10日 14:35
  • 539

scarpe hogan outlet this anomaly is similar to alcoholics and drug addicts strikingly abnormal brai

dealing with emotions, regulate attention and make decisions in part) will be abnormal,scarpe hogan ...
  • u018814033
  • u018814033
  • 2014年08月04日 16:08
  • 13

LSH技术---Finding Similar Items

承接上一篇博客,我们使用minhash压缩内容量较大的文档,但是文档相互之间的相似性计算仍然比较麻烦,因为两两之间的文档pairs太多了。有时候我们只需要最相似的文档pairs,没有必要计算所有pai...
  • fenghuangdesire
  • fenghuangdesire
  • 2014年11月19日 17:49
  • 1516

PostgreSQL模式匹配关键字similar to 和 like 的区别

最近在做了一个关于postgreSQL相关的项目,个人工作中遇到了关于字符串模式匹配的工作,以下是我阅读 postgre官方文档中对similar to 和 like的说明的个人笔记: str...
  • hu330459076
  • hu330459076
  • 2011年11月20日 14:40
  • 5513

php:similar_text()函数的相关解析

当我们想去比较某些句子或者内容的相似度或者匹配程度的时候,难免就会用到similar_text()这个函数,下面对这个函数进行一个代码演示 我创立了6个句子,并且用到符号,然后进行两两对比,可以看出...
  • qq_28704425
  • qq_28704425
  • 2016年07月11日 14:40
  • 349
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Similar Pair _ HackerRank
举报原因:
原因补充:

(最多只允许输入30个字)