摘要:
题面在此 题解:将字符串分成k部分,然后求最长前缀,所以我们只关注前缀部分就好了,公共前缀后边的是啥不用管,那么问题就转化成了是否存在k个不相交的字符串的最长公共前缀问题。首先用Hash来记录一下字符串,然后再二分枚举最长前缀的长度。怎么样才能保证不相交呢?可以用map记录一段字符串的右边界。然后当 阅读全文
摘要:
题面在此 题解:将字符串分成k部分,然后求最长前缀,所以我们只关注前缀部分就好了,公共前缀后边的是啥不用管,那么问题就转化成了是否存在k个不相交的字符串的最长公共前缀问题。首先用Hash来记录一下字符串,然后再二分枚举最长前缀的长度。怎么样才能保证不相交呢?可以用map记录一段字符串的右边界。然后当 阅读全文
摘要:
题目大意比较简单,就是求一堆(二元组)的异或和。 思路:按位考虑,如果说第k位为1的话,那么一定有奇数个(二元组)在该位为1。二元组内的数是相加的,相加是可以进位的。所以第k位是0还是1,至于k为后边的数有关,所以我们直接(1<<(k+1))取模。取模后每个数的取值范围就是[0,2^(k+1)-1] 阅读全文
摘要:
题解:设有一条边x->y,数组dis1[i]表示从1到i的最短距离,dis2[i]表示从n到i的最短距离。 1 如果说将x->y反向之前没有经过x->y,但是反向后我经过了x,y说明找到了一个更优的路径,那么反向后的答案就是dis1[y]+dis2[x]+(x,y),如果说反向后我没有经过 x->y 阅读全文
摘要:
题目大意:一个n*m的棋盘上有k个棋子,k个棋子相互关联,可以一起向上向下向左向右,当碰到边界时,如果继续移动会发生越界,那么该棋子会保持不动,其余棋子继续移动。问能否在2*n*m的移动次数内,使各个棋子到达其约定的位置。 题解:将所有的棋子汇集于一点,然后蛇形遍历棋盘复杂度为n*m+n+m-3。( 阅读全文
摘要:
题目大意:求好数组的个数,所谓好数组 1好数组是原数组的一段连续的子数组,2 好数组不包含元素和为0的子数组。 题解:唉,这个题目把我给些懵了....我一开始的想法求后缀和,保存位置,然后枚举前缀和,二分查找大于当前位置的第一个后缀合,但是ai的范围太大了,位置保存不了,然后又瞎搞了很久....最后 阅读全文
摘要:
这是一个非常经典的带权并查集,有两种写法。 1 边权并查集 规定一下,当x和y这条边的权值为0时,表示x和y是同类,当为1时,表示x吃y,当为2时,表示x被y吃。 一共有三种状态,如图,当A吃B,B吃C时,C必须吃A,路径压缩后,A被C吃。 然后就是带权并查集的模板了。 判断条件,当x和y在同一颗树 阅读全文
摘要:
关于带权并查集,到目前为止,基本上可以分为两类,一种是点权,另一种是边权,顾名思义,就是把权重加在点上或者边上。 1 点权。点权并查集的操作是在unite中操作的,在并查集中我们想要维护的值一般都在根上,比如说要维护一树上的最大值。 因为我们维护的最大值信息都在跟上,左边那颗树根RA保存了树1的最大 阅读全文
摘要:
点权并查集的反向离线操作 题目大意:有n个stars,每一个都一定的“颜值”。然后stars与stars之间可以相连,query c表示再与c相连的stars中,颜值比c高的,stars的标号,如果有多个, 输出最小那一个。destroy x y,表示将x和y这条边销毁掉。 题解:并查集只能加边不能 阅读全文
摘要:
题目大意:n个物品,每个物品有一定的保质期d和一定的利润p,一天只能出售一个物品,问最大利润是多少? 题解:这是一个贪心的题目,有两种做法。 1 首先排序,从大到小排,然后每个物品,按保质期从后往前找,找到第一个没被占用的日期,然后出售。 code: #include<cstdio> #includ 阅读全文
摘要:
例题: poj 1308 题目大意比较简单,对任意两个点,有且仅有一条道路,也就是一棵树。 题解:一棵树中,肯定是不能有环的,而且只能由一个根节点。(没认真读题,只知道在那里判环。。。。),所以这个题先判环然后就是判根节点的唯一性。 //#include<bits/stdc++.h> #includ 阅读全文
|