![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hackerrank
ForABiggerWorld
这个作者很懒,什么都没留下…
展开
-
Swap Permutation
给你一个数组A = [1, 2, 3, ..., n]:对A进行好恰好k次相邻交换,你能得到多少个不同的序列 (S1)? 对A进行最多k次交换,你能得到多少个不同的序列 (S1)?一次相邻交换是指交换数组A中两个相邻位置的元素,即A[i]和A[i+1]或者A[i]和A[i-1]。 一次交换是指交换数组A中的任意两个位置不同的元素,即 A[i]和A[j] ∀ 1 ≤ i, j ≤ N, i ...原创 2018-09-14 17:24:10 · 314 阅读 · 0 评论 -
Candles Counting
https://www.hackerrank.com/challenges/candles-2/problemhttps://www.hackerrank.com/challenges/candles-2/editorial先不考虑color,DP复杂度是NN,从状态转移方程看到每次求dp[i]都有个求和的过程,这个可以用线段树优化,然后正好height数组也是有范围的。然后就...原创 2018-09-14 13:18:20 · 159 阅读 · 0 评论 -
Travel around the world
在Steven的世界里,有通过N条单向道路连接的N个城市。程序标号分别为 0 到 N - 1。Steven可以从 城市 i 走到 城市 (i + 1) % N,( 0-> 1 -> 2 -> .... -> N - 1 -> 0). Steven 想开汽车巡游世界。他的车子的油箱容积为 C 升。在每一座城市他可以最多加 a[i] 升油,并且从 城市 i 到下一个城...原创 2018-09-14 10:00:55 · 296 阅读 · 0 评论 -
The Indian Job
这是著名的意大利抢劫——“偷天换日”的印度版本. N个劫匪已经闯入国家博物馆,并且准备进入装满珠宝的主展厅。他们非常幸运,因为他们闯入时,护卫正好要离开博物馆恰好G分钟。但是,还有别的问题。主展厅装有热传感器,所以再任何时刻主展厅里有超过两个人,警报器就会响。 为了收集珠宝,每个劫匪需要在主展厅停留连续的A[i]分钟, 0 <= i < N,现在劫匪们想知道是否存在一种抢劫安排,使得警...原创 2018-09-13 16:26:28 · 150 阅读 · 0 评论 -
Counting Special Sub-Cubes
dp[w][i][j][k]表示左上角坐标为(i,j,k)大小为w的cube的最大值状态转移:dp[w+1][i][j][k]=max(dp[w][i+a][j+b][k+c]) a,b,c={0,1}def specialSubCubes(n,a): cube=[[[0 for _ in range(n)] for _ in range(n)] for _ in ra...原创 2018-09-13 12:55:18 · 274 阅读 · 0 评论 -
LCS Returns
https://www.hackerrank.com/challenges/tutzki-and-lcs/problem在a中加入的那个数一定要与b中的某个数match上,然后ab各分成2部分,分别求2个pair的LCS,然后枚举一下a加入的位置就好了。不必每次求2个pair的LCS,先跑一遍全部长度的ab的LCS即可def LCS(a, b): na,nb=len...原创 2018-09-12 10:46:59 · 196 阅读 · 0 评论 -
Wet Shark and Two Subsequences
ai+bi = Rai-bi = S2ai = R+S2bi = R-S然后就是DP,如果用二维数组的话,注意计算的方向,防止覆盖dp数组的值def twoSubsequences(x, r, s): if r<s or (r+s)%2: return 0 mod=10**9+7 sa,sb=(r+s)//2,(r-s)//2 maxL...原创 2018-09-11 12:44:05 · 365 阅读 · 0 评论 -
Two Robots
https://www.hackerrank.com/challenges/two-robots/problem思路:DP。用dp[i][j][k]表示执行到第i步,一个在j位置,一个在k位置,复杂度O(NNK),TLE其实有一个robot一定停在当前query的结束位置,只需要枚举另外一个robot(可以是2个robot交替着来)的位置就好了,复杂度O(NK)def t...原创 2018-09-11 10:34:07 · 254 阅读 · 0 评论 -
Lego Blocks
https://www.hackerrank.com/challenges/lego-blocks/editorial解法真的很impressive,横着要考虑,竖直的角度也要考虑。先考虑简单的情况:没有第二个限制,每层就是独立的,对于一层用DP求出n情况下的可能数,然后快速幂得到n层的可能数。现在加上第二个限制,一个思路就是从随便放的所有情况减去违反第二个限制的情况数。现...原创 2018-09-13 09:11:54 · 1800 阅读 · 0 评论 -
Substring Diff
思路:一开始按照naive的DP,开3维数组,复杂度O(NNK),TLE# Complete the substringDiff function below.def substringDiff(k, s1, s2): n=len(s1) dp=[[[0 for _ in range(k+1)] for _ in range(n)] for _ in range(n...原创 2018-09-10 11:42:32 · 206 阅读 · 0 评论 -
Mr K marsh
暴力思路,然后为了去掉一些重复运算,做下面2个优化1. 先用4个DP数组表示当前位置能往上下左右expand的长度2. 循环的时候,如果当前循环最大也不比当前的最好大,就可直接breakdef kMarsh(grid): n,m=len(grid),len(grid[0]) up=[[0 for _ in range(m)] for _ in range(n)...原创 2018-09-10 11:34:55 · 180 阅读 · 0 评论 -
Sam and substrings
https://www.hackerrank.com/challenges/sam-and-substrings/problemfSamantha 和 Sam 正在玩一个游戏。他们面前有 ‘N’ 个球,每一个从 0 到 9 编号,但是第一个球不会为 0. Samantha 计算了这些球构成的字符串的所有子串。对每一个子串,如果子串为S,Sam 必须向一个初始为空的盒子里边放 S 块糖。Sam ...原创 2018-09-07 11:12:05 · 230 阅读 · 0 评论 -
Sherlock and Cost
https://www.hackerrank.com/challenges/sherlock-and-cost/problem一开始想贪心,高低交错来,但是这种贪心法是有问题的,比如100 1 2 100,用这种贪心法没法取到2个大头,正解是DP,只有2个状态,当前数取1,或者max# Complete the cost function below.def cost(B)...原创 2018-09-07 11:06:19 · 273 阅读 · 0 评论 -
Fair Cut
参考: https://pastebin.com/1R543whN直接用DP数组表示正解是无法进行状态转移的,换种思路,每次计算DP[i]的时候把当前第i位所有的计算都先算出来,因为本身就是确定的,这样DP[i]虽然不是这个子问题的解,但是最后的DP[-1]是正解## Complete the fairCut function below.# ref: https://pas...原创 2018-09-07 10:58:56 · 242 阅读 · 0 评论 -
Morgan and a String
https://www.hackerrank.com/challenges/morgan-and-a-string/problem思路:two pointer,每次贪心选取小的,对于相同的情况,判断后面数组的大小,取小的但是如果已经是最后一位了,剩下的就是空字符串,是最小的,但是确实不能选的,比如B,BA。如果把第一个string的B拿掉,最后就是BBA,但是拿第二个B就是BA...原创 2018-09-22 13:56:46 · 325 阅读 · 0 评论 -
Goodland Electricity
思路:很直观的一个想法是TreeSet来greedy search,每次找当前plant最远能放到的位置 ,Python没有TreeSet,所以用二分注意一下起始位置和结束位置import bisect# Complete the pylons function below.def pylons(k, arr): a = [i for i in range(len(...原创 2018-09-17 10:20:20 · 218 阅读 · 0 评论 -
Interval Selection
https://www.hackerrank.com/challenges/interval-selection/problem按end排序,然后从end大的开始遍历每个interval,先判断到当前interval的end,有哪些interval的start已经比这个end大,说明这个interval一定跟自后要遍历的interval没有交集。然后维护一个大小为2的数组表示当...原创 2018-09-13 15:09:06 · 185 阅读 · 0 评论 -
Xor-sequence
类似于running sum的思路,就是a^b^a=b然后就是找规律了def helper(x): n=x%8 if n==0 or n==1: return x if n==2 or n==3: return 2 if n==4 or n==5: return x+2 return 0def xorSequence(l, r): ...原创 2018-09-12 20:59:25 · 126 阅读 · 0 评论 -
Minimum Loss
Java有TreeSet秒解,Python没有,但是可以sort,然后最小值一定出现在连续的2个index之间因为如果间隔超过1是合理的pair,那么间隔为1的也一定是合理的pair# Complete the minimumLoss function below.def minimumLoss(a): d={v:i for i,v in enumerate(a)} ...原创 2018-09-18 11:30:45 · 168 阅读 · 0 评论 -
Lily's Homework
https://www.hackerrank.com/challenges/lilys-homework/problem 数组有序是最小的,反证法。可以是顺序,逆序。然后就是求数组长度减去环的个数。一开始一直TLE,发现是hackerrank平台case没有给全,然后Python有事可以读取一行做list,what is the fuck......# Complete ...原创 2018-09-12 19:50:28 · 789 阅读 · 0 评论 -
Beautiful Quadruples
https://www.hackerrank.com/challenges/xor-quadruples/problemhttps://www.hackerrank.com/challenges/xor-quadruples/editorial关键点:1. 把4个数拆成2组,预先计算,而且预先计算是小于x的区间范围(遍历后面那组的时候就会发现要这样才能做到O(NN))2. ...原创 2018-09-20 20:53:42 · 231 阅读 · 0 评论 -
Gena Playing Hanoi
思路:首先思路是BFS,要把结果都放到第一个柱子上,所以后面3个的状态顺序无所谓,可以可以快6倍from collections import dequedef serialize(a):# return tuple(sorted([tuple(t) for t in a])) l=[tuple(t) for t in a] l[1:]=sorted(l[...原创 2018-09-20 10:15:15 · 218 阅读 · 0 评论 -
Cut the Tree
Atul 对图论感兴趣,最近他正在学习树形结构。他发现在一颗树 T 上移除一条边会生成两个分开的树:T1 和 T2。树 T 的每个顶点被赋予了一个正整数。你的任务是移除一条边使得 *Tree_diff* 最小化, *Tree_diff* 的定义如下: F(T) = 树T上各顶点的数值之和。 Tree_diff(T) = abs(F(T1) - F(T2))输入格式第一行包含一...原创 2018-09-19 15:06:07 · 522 阅读 · 0 评论 -
Larry's Array
https://www.hackerrank.com/challenges/larrys-array/problemhttps://www.hackerrank.com/challenges/larrys-array/forum/comments/124313思路:对于奇数长度的数组,rotate一次不改变逆序对的奇偶性;rotate偶数长度会改变 而拍完序后的逆序对为0...原创 2018-09-27 12:18:54 · 698 阅读 · 0 评论 -
Flipping the Matrix
思路:对于ij位置,有其他3个位置的数可以交换过来。而且可以在不改变upper-left其他部分的情况下交换过来,所以就是取所有upper left ij位置的对应4个位置的max,具体就是以下四个位置# Complete the flippingMatrix function below.def flippingMatrix(a,n): return sum(...原创 2018-09-27 18:09:33 · 447 阅读 · 0 评论