08 2018 档案

摘要:要多简单有多简单。然而不知道为啥在luogu上过不掉。 阅读全文
posted @ 2018-08-31 16:05 Gloid 阅读(182) 评论(0) 推荐(0)
摘要:对于排列计数问题一般把数按一个特定的顺序加入排列。这个题做法比较显然,考虑将数从小到大加入排列即可。 阅读全文
posted @ 2018-08-31 15:39 Gloid 阅读(232) 评论(0) 推荐(0)
摘要:这个东西似乎叫摩尔投票法。注意到这里众数的出现次数大于其他数的出现次数之和。考虑cnt表示当前所找到的众数比其他数出现次数多多少,每次更新如果cnt<0就把众数选做当前数。正确性感性理解一下,不妨把非众数的数看成同一种数,这样的话正确性显然,现在非众数的数可能不一样那就更对了。 阅读全文
posted @ 2018-08-31 13:29 Gloid 阅读(151) 评论(0) 推荐(0)
摘要:虽然不一定每次都是由编号小的点向编号大的走,但一个人摧毁的顺序一定是从编号小的到编号大的。那么在摧毁据点x的过程中,其只能经过编号小于x的点。并且这样一定合法,因为可以控制其他人先去摧毁所经过的点。那么可以floyd求出由摧毁x到摧毁y的最短路径。注意这里也需要更新起点编号大于终点的情况,否则flo 阅读全文
posted @ 2018-08-31 12:20 Gloid 阅读(240) 评论(0) 推荐(0)
摘要:比较难想到的是将题目中的要求看做异或。那么有ai,j^ai+1,j^ai,j+1^ai+1,j+1=1。瞎化一化可以大胆猜想得到a1,1^a1,j^ai,1^ai,j=(i-1)*(j-1)&1。也就是说,确定第一行和第一列的颜色,就可以确定整个矩阵。现在如果没有已填的格子的限制,答案就是2n+m- 阅读全文
posted @ 2018-08-30 18:22 Gloid 阅读(197) 评论(0) 推荐(0)
摘要:设最后的组成为x=x0a+x1b,y=y0a+y1b。那么容易发现x0和y0奇偶性相同、x1和y1奇偶性相同。于是考虑奇偶两种情况,问题就变为是否存在x和y使ax+by=c,那么其充要条件是gcd(a,b)|c。 阅读全文
posted @ 2018-08-30 08:40 Gloid 阅读(242) 评论(0) 推荐(0)
摘要:令f[i][j]表示连i条边时奇点个数为j的方案数,转移时讨论两奇点相连、一奇一偶相连、两偶点相连即可。注意这样会造成重边,那么算出恰好有一条重边的方案数并减掉。由于是有序地考虑每条边,每次还要除以i。 阅读全文
posted @ 2018-08-30 00:35 Gloid 阅读(274) 评论(0) 推荐(0)
摘要:根据组合意义,有nk=ΣC(n,i)*i!*S(k,i) (i=0~k),即将k个有标号球放进n个有标号盒子的方案数=在n个盒子中选i个将k个有标号球放入并且每个盒子至少有一个球。 回到本题,可以令f[i][j]表示ΣC(dis(i,k),j) (k为i子树中节点),通过C(i,j)=C(i-1,j 阅读全文
posted @ 2018-08-29 13:03 Gloid 阅读(194) 评论(0) 推荐(0)
摘要:容易想到一种暴力的做法:枚举中间的位置,设该位置权值为x,如果其两边存在权值关于x对称即合法。 问题是如何快速寻找这个东西是否存在。考虑仅将该位置左边出现的权值标1。那么若在值域上若关于x对称的两权值标号不同,说明他们的位置分别在两侧,也就说明存在等差子序列。那么只需要判断整体是否相同,哈希即可。 阅读全文
posted @ 2018-08-28 21:03 Gloid 阅读(240) 评论(0) 推荐(0)
摘要:显然这样的路径一定是选择了与1相邻的不同的两点分别作为起点和终点(除1本身)。如果能将每一组起点终点都计算到就可以得出最优解了。暴力显然不行。注意到我们每次求出的是单源最短路径,考虑如何充分利用信息。那么有一种神奇的方法:按照编号的二进制的某一位给所有与1相邻的点分组,一组作为起点另一组作为终点,然 阅读全文
posted @ 2018-08-28 02:31 Gloid 阅读(257) 评论(0) 推荐(0)
摘要:要求最大值最小容易想到二分答案。首先对每个点求出子树中与其最远的距离是多少,二分答案后就可以标记上一些必须在所选择路径中的点,并且这些点是不应存在祖先关系的。那么如果剩下的点数量>=3,显然该答案不可行;=0,显然可行;=1,由该点沿其到根的路径往上爬,并计算最远距离判断是否合法;=2,求出两点lc 阅读全文
posted @ 2018-08-27 22:01 Gloid 阅读(186) 评论(0) 推荐(0)
摘要:令f[i]表示i子树内最少染色次数,加上012状态分别表示该子树内叶节点已均被满足、存在黑色叶节点未被满足、存在白色叶节点未被满足,考虑i节点涂色情况即可转移。事实上贪心也可以。 阅读全文
posted @ 2018-08-27 18:51 Gloid 阅读(142) 评论(0) 推荐(0)
摘要:不妨看做是先用k个指针指向被选择的前k个元素,然后每次将选中当前第一个元素的指针移到最后,并且需要满足位置变化量>=m。显然这样可以构造出所有的合法方案。那么可以以此建立费用流模型,以一条流量k费用0的链将所有点串起来,再由每个位置向该位置+m连流量1费用为该元素权值的边,最大费用流即可。 阅读全文
posted @ 2018-08-27 13:09 Gloid 阅读(274) 评论(0) 推荐(0)
摘要:求出最短路后找出可能在最短路上的边,显然割完边后我们需要让图中这样的边无法构成1到n的路径,最小割即可,非常板子。 阅读全文
posted @ 2018-08-26 22:49 Gloid 阅读(236) 评论(0) 推荐(0)
摘要:求x2+y2=r2的整数解个数,显然要化化式子。考虑求正整数解。 y2=r2-x2→y2=(r-x)(r+x)→(r-x)(r+x)为完全平方数→(r-x)(r+x)/d2为完全平方数,d=gcd(r-x,r+x)→(r-x)/d·(r+x)/d为完全平方数,gcd((r-x)/d,(r+x)/d) 阅读全文
posted @ 2018-08-26 21:34 Gloid 阅读(234) 评论(0) 推荐(0)
摘要:显然可以用总方案数减掉三点共线的情况。对于三点共线,一个暴力的做法是枚举起点终点,其间整点数量即为横纵坐标差的gcd-1。这样显然会T,注意到起点终点所形成的线段在哪个位置是没有区别的,于是枚举线段算出这样的线段条数就可以了。 似乎可以莫比乌斯反演一波。 阅读全文
posted @ 2018-08-26 11:43 Gloid 阅读(150) 评论(0) 推荐(0)
摘要:首先将完全相同的边的权值累加。考虑这样一种trick:给边确定一个方向,由度数小的连向度数大的,若度数相同则由编号小的连向编号大的。这样显然会得到一个DAG。那么原图的三元环中就一定有且仅有一个点有两条入边了。并且每个点的出度不会超过√m,因为假设一个点连出了x条边那么其所连向的每个点也至少会有x条 阅读全文
posted @ 2018-08-24 21:20 Gloid 阅读(299) 评论(0) 推荐(0)
摘要:由于本质不同的回文子串数量是O(n)的,考虑在对于每个回文子串在第一次找到它时对其暴力统计。可以发现manacher时若右端点移动则找到了一个新回文串。注意这样会漏掉串长为1的情况,特判一下。 现在问题变为统计一个子串的出现次数。可以用SA,二分乱搞一下即可。这里使用SAM。以parent树上表示该 阅读全文
posted @ 2018-08-24 20:06 Gloid 阅读(232) 评论(0) 推荐(0)
摘要:建出parent树统计即可。开始memcpy处写的是sizeof(son[y]),然后就T掉了……还是少用这种东西吧。 同时也有SA做法。答案子串一定是名次数组中相邻两个串的lcp。单调栈统计其是几个后缀的前缀即可。 阅读全文
posted @ 2018-08-23 14:22 Gloid 阅读(225) 评论(0) 推荐(1)
摘要:参考:https://blog.csdn.net/doyouseeman/article/details/52245413 https://wenku.baidu.com/view/90f22eec551810a6f4248606.html APIO2018课件《从DFA到后缀自动机》张云帆 随便写 阅读全文
posted @ 2018-08-22 23:05 Gloid 阅读(316) 评论(0) 推荐(0)
摘要:一个比较显然的做法:对每棵子树用线段树维护其中的深度,线段树合并即可。 本来想用这个题学一下dsu on tree,结果还是弃疗了。 阅读全文
posted @ 2018-08-19 21:01 Gloid 阅读(209) 评论(0) 推荐(0)
摘要:首先显然地,如果某个格子的权值超过2k,其一定不在答案之中;如果在[k,2k]中,其自身就可以作为答案。那么现在我们只需要考虑所选权值都小于k的情况。 可以发现一个结论:若存在一个权值都小于k的矩阵其权值和>=k,那么该矩阵一定存在权值和在[k,2k]中的子矩阵。 找到该子矩阵的过程和证明的过程是一 阅读全文
posted @ 2018-08-19 19:08 Gloid 阅读(278) 评论(0) 推荐(0)
摘要:因为要求数值不同,不妨设gcd(x,y)=1。由提示可以知道,x/y是纯循环小数的充要条件是x·klen=x(mod y)。因为x和y互质,两边同除x,得klen=1(mod y)。那么当且仅当k和y互质,存在len使该式成立。 于是现在要求的就是 k是固定的,先不管后面一部分。套路地化式子: 设f 阅读全文
posted @ 2018-08-16 17:00 Gloid 阅读(165) 评论(0) 推荐(0)
摘要:某两个点间的请求只对不在这条路径上的询问有影响。那么容易想到每次修改除该路径上的所有点的答案。对每个点建个两个堆,其中一个用来删除,线段树维护即可。由于一条路径在树剖后的dfs序中是log个区间,所以其补集也是log个区间。 然而由于复杂度是O(nlog3n)的以及蒟蒻自带大常数,在luogu上T了 阅读全文
posted @ 2018-08-16 01:51 Gloid 阅读(158) 评论(0) 推荐(0)
摘要:先不考虑换根。考虑修改某个点权值对答案的影响。显然这只会改变其祖先的子树权值和,设某祖先原子树权值和为s,修改后权值增加了x,则对答案的影响为(s+x)2-s2=2sx+x2。可以发现只要维护每个点到根的路径的子树和之和就可以了,随便树剖一波。 对于换根,可以发现这也只会改变其祖先的子树权值和。设原 阅读全文
posted @ 2018-08-15 13:45 Gloid 阅读(158) 评论(0) 推荐(0)
摘要:容易想到一个费用流做法:将每种蔬菜拆成p种,对应p个过期时间,每一种向可以卖的时间连边,第一次卖的奖励算在最晚过期的一种里。对于天数动态加点。不过这样边数太多了,因为第i天能卖的第i-1天一定能卖,可以改成每一种只向过期时间连边然后第i天向第i-1天连边。这样就有60分了。但费用流没有什么优化空间了 阅读全文
posted @ 2018-08-14 21:27 Gloid 阅读(173) 评论(0) 推荐(0)
摘要:如果只考虑某个子矩阵的话,其最大值为v的方案数显然是vsize-(v-1)size。问题在于处理子矩阵间的交叉情况。 如果两个交叉的子矩阵所要求的最大值不同,可以直接把交叉部分划给所要求的最大值较小的子矩阵。那么,所要求最大值不同的格子彼此间是独立的。于是现在可以只考虑要求相同的格子。 直接计算似乎 阅读全文
posted @ 2018-08-14 00:55 Gloid 阅读(233) 评论(0) 推荐(0)
摘要:没有限制的话算一个组合数就好了。对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可。 一般情况下n、m、p都是1e9级别的组合数没办法算。不过可以发现模数已经被给出,并且这些模数的最大质因子幂都不是很大,那么扩展lucas就可以了。 阅读全文
posted @ 2018-08-13 19:52 Gloid 阅读(237) 评论(0) 推荐(0)
摘要:第一眼生成函数。四个等比数列形式的多项式相乘,可以化成四个分式。其中分母部分是固定的,可以多项式求逆预处理出来。而分子部分由于项数很少,询问时2^4算一下贡献就好了。这个思路比较直观。只是常数巨大,以及需要敲一发类似任意模数ntt的东西来避免爆精度。成功以这种做法拿下luogu倒数rank1,至于b 阅读全文
posted @ 2018-08-13 02:03 Gloid 阅读(210) 评论(0) 推荐(0)
摘要:相当于给树上的每个点分配一个编号使父亲和儿子间都有连边。 于是可以考虑树形dp:设f[i][j][k]为i号点的编号为j,其子树中编号集合为k的方案数。转移显然。然而复杂度3n·n3左右,具体我也不知道是多少,但肯定跑不过。 如果状态有集合的话不管怎样底数都是3了,考虑能不能变成2。完全不能可以想到 阅读全文
posted @ 2018-08-12 14:39 Gloid 阅读(173) 评论(0) 推荐(0)
摘要:由数据范围容易想到矩阵快速幂和状压。 显然若要满足一辆公交车的相邻站台差不超过p,则每相邻p个站台中每辆车至少经过一个站台。可以发现这既是必要的,也是充分的。 开始的时候所有车是相邻的。考虑每次把一辆公交车塞到前方第一个未到达的站台。这个时候公交车之间是没有区别的,因为只要保证每相邻p个站台每辆车都 阅读全文
posted @ 2018-08-11 15:27 Gloid 阅读(155) 评论(0) 推荐(0)
摘要:可以看做棋子放在某个位置后该种颜色就占领了那一行一列。行列间彼此没有区别。 于是可以设f[i][j][k]表示前k种棋子占领了i行j列的方案数。转移时枚举第k种棋子占领几行几列。注意行列间是有序的,要乘上一个组合数。这里f[i][j][k]可以是在原棋盘选i行j列占领的方案数,也可以是占领i行j列棋 阅读全文
posted @ 2018-08-11 11:43 Gloid 阅读(150) 评论(0) 推荐(0)
摘要:容易想到枚举恰好出现S次的颜色有几种。如果固定至少有i种恰好出现S次,那么方案数是C(M,i)·C(N,i*S)·(M-i)N-i*S·(i*S)!/(S!)i,设为f(i)。 于是考虑容斥,可得恰好i种的答案为Σ(-1)j-iC(j,i)·f(j) (j=i~min(M,⌊N/S⌋))。因为容斥是 阅读全文
posted @ 2018-08-10 23:20 Gloid 阅读(154) 评论(0) 推荐(0)
摘要:容易想到先统计回文串数量,这样就去掉了不连续的限制,变为统计回文序列数量。 显然以某个位置为对称轴的回文序列数量就是2其两边(包括自身)对称相等的位置数量-1。对称有啥性质?位置和相等。这不就是卷积嘛。那么就做完了。 又写挂manacher,没救。 阅读全文
posted @ 2018-08-10 15:19 Gloid 阅读(149) 评论(0) 推荐(0)
摘要:非常裸的KD-tree。然而我没学啊。 考虑如何离线求一个点在平面中的曼哈顿最近点。 绝对值显得有点麻烦,于是把绝对值拆开分情况讨论一波。对于横坐标小于该点的,记录对于纵坐标的前缀x+y最大值和后缀x-y最大值;横坐标大于该点的,记录对于纵坐标的前缀y-x最大值和后缀-y-x最大值。 不过这样不太方 阅读全文
posted @ 2018-08-10 12:26 Gloid 阅读(229) 评论(0) 推荐(0)
摘要:两个串匹配时相匹配的位置位置差是相同的,那么翻转一个串就变成位置和相同,卷积的形式。 考虑如何使用卷积体现两个位置能否匹配。一个暴力的思路是每次只考虑一种字符,将其在一个串中设为1,并在另一个串中将不是该字符且不是通配符的设为1,卷积结果不为0则无法匹配。这样要跑26次1e6的FFT,就算有6s也… 阅读全文
posted @ 2018-08-09 23:14 Gloid 阅读(178) 评论(0) 推荐(0)
摘要:思路比较直观。设A(x)=Σxai。先把只选一种的统计进去。然后考虑选两种,这个直接A(x)自己卷起来就好了,要去掉选同一种的情况然后除以2。现在得到了选两种的每种权值的方案数,再把这个卷上A(x)。得到这个后考虑去重,其中重复的就是选了两个相同的和另外一个,那么再把选两个相同的生成函数搞出来卷上A 阅读全文
posted @ 2018-08-09 21:42 Gloid 阅读(184) 评论(0) 推荐(0)
摘要:显然构造出生成函数:则有f(x)=(1+x2+x4+……)·(1+x)·(1+x+x2)·(x+x3+x5+……)·(1+x4+x8+……)·(1+x+x2+x3)·(1+x)·(1+x3+x6+……)。 化为有限,则有f(x)=x(1+x)2·(1+x+x2)·(1+x+x2+x3)/(1-x2) 阅读全文
posted @ 2018-08-09 18:48 Gloid 阅读(241) 评论(0) 推荐(0)
摘要:首先有一个想法,翻转串后直接卷积看有没有0匹配上1。但这是必要而不充分的因为在原串和翻转串中?不能同时取两个值。 先有一些结论: 如果s中长度为len的前缀是border,那么其存在|s|-len的循环节(最后一段不一定完整)。 如果已知len不是s的循环节,那么显然len的因子也不是s的循环节。 阅读全文
posted @ 2018-08-09 17:52 Gloid 阅读(169) 评论(0) 推荐(0)
摘要:设A(n)为a中n的个数,B(n)为b中n的个数。如果只考虑加法显然是一个卷积,减法翻转一下也显然是一个卷积。 问题在于两者都有。容易想到分开处理。那么可以考虑分治。即对于值域区间[l,r],分别计算A[l,mid]和B[mid+1,r]的贡献及A[mid+1,r]和B[l,mid]的贡献,然后再递 阅读全文
posted @ 2018-08-09 12:52 Gloid 阅读(294) 评论(0) 推荐(0)
摘要:首先有序整数拆分有个显然的递推式是g(n)=Σg(i) (i=0~n-1),即枚举加入最后一个数之前和是多少。(虽然不用递推式也能显然地知道答案是2n-1)。 类似地,lqp拆分有递推式f(n)=Σf(i)fib(n-i) (i=0~n-1)。由乘法分配律就可以推出。特别地,f(0)=1。 又是一个 阅读全文
posted @ 2018-08-08 20:43 Gloid 阅读(259) 评论(0) 推荐(0)
摘要:设f(n)为权值为n的神犇二叉树个数。考虑如何递推求这个东西。 套路地枚举根节点的左右子树。则f(n)=Σf(i)f(n-i-cj),cj即根的权值。卷积的形式,cj也可以通过卷上一个多项式枚举。可以考虑生成函数。 设F(x)为f(n)的生成函数,G(x)为c(n)的生成函数,G(x)中含有xa项表 阅读全文
posted @ 2018-08-08 17:09 Gloid 阅读(240) 评论(0) 推荐(0)
摘要:设f(n)为n个节点的二叉树个数,g(n)为n个节点的二叉树的叶子数量之和。则答案为g(n)/f(n)。 显然f(n)为卡特兰数。有递推式f(n)=Σf(i)f(n-i-1) (i=0~n-1)。 类似地,左子树节点数为i时右子树有f(n-i-1)种情况,那么可以对左子树的叶子节点数之和计数,显然再 阅读全文
posted @ 2018-08-08 02:54 Gloid 阅读(311) 评论(0) 推荐(0)
摘要:参考:http://www.matrix67.com/blog/archives/120 前置: 广义组合数:C(n,m)=n·(n-1)·……·(n-m+1)/m! (n∈R,m∈N) 广义二项式定理: 等比数列求和公式:a1+a1·q+a1·q2+a1·q3+……a1·qn=a1(1-qn+1) 阅读全文
posted @ 2018-08-07 20:05 Gloid 阅读(550) 评论(0) 推荐(0)
摘要:http://blog.miskcoo.com/2015/05/polynomial-division 好神啊! 通过翻转多项式消除余数的影响,主要原理是商只与次数不小于m的项有关。 阅读全文
posted @ 2018-08-07 16:44 Gloid 阅读(186) 评论(0) 推荐(0)
摘要:http://blog.miskcoo.com/2015/05/polynomial-inverse 好神啊! B(x)=B'(x)·(2-A(x)B'(x)) 注意ntt的时候防止项数溢出,即将多项式补零成n位后,相乘时次数最高的非零项不超过n次。 upd:可以在点值表示下直接相乘。又好写又跑得快 阅读全文
posted @ 2018-08-07 13:30 Gloid 阅读(242) 评论(0) 推荐(0)
摘要:假设已经linkcut完了树,答案显然是树的直径。那么考虑这条直径在原树中是怎样的。容易想到其是由原树中恰好k+1条点不相交的链(包括单个点)拼接而成的。因为这样的链显然可以通过linkcut拼接起来,而若选择不超过k条链则可能有链不得不被cut拆开,即使不会被拆开也可以通过选择单点来达到恰好k+1 阅读全文
posted @ 2018-08-07 01:53 Gloid 阅读(396) 评论(0) 推荐(0)
摘要:显然这形成了一个树形结构。考虑这样一种贪心:按照曲目顺序,每次取消其父亲的预留,并选择当前可选择(保证其子树有合法选择且满足预留)的最大值,然后对其子树预留出大于等于他的一些值。这个做法显然是正确的。问题在于怎么达到预留的效果。 离散化后建一棵权值线段树。线段树每个节点维护这段权值其右边(即大于该权 阅读全文
posted @ 2018-08-06 14:21 Gloid 阅读(298) 评论(0) 推荐(0)
摘要:劈配,匹配,网络流。那么考虑怎么跑网络流。 先看第一问。首先套路的建出超源超汇。不用想也知道导师向汇连容量为战队人数上限的边。特别地,给出局也建一个点,向汇连容量inf的边(似乎没有必要)。对于一个新学员,假设我们已经知道了之前的学员的最优选择,可以把之前的每名学员和可以选择的导师连边,并由源向学员 阅读全文
posted @ 2018-08-06 02:13 Gloid 阅读(243) 评论(0) 推荐(0)
摘要:一看上去就是一个二合一的题。那么先解决第一部分求最优路线(及所有可能在最优路线上的线段)。 由于不能往下走,可以以y坐标作为阶段。对于y坐标不同的点,我们将可以直接到达的两点连边,显然这样的边的个数是线性的。如果是右上方向那么横纵坐标差相等,左上则和相等,可以直接排序搞定。 y坐标相同的点(下称一排 阅读全文
posted @ 2018-08-05 22:19 Gloid 阅读(230) 评论(0) 推荐(0)
摘要:原图所有边下界设为1上界设为inf花费为时间,那么显然就是一个上下界最小费用流了。做法与可行流类似。 因为每次选的都是最短路增广,且显然不会有负权增广路,所以所求出来的可行流的费用就是最小的。 阅读全文
posted @ 2018-08-05 13:07 Gloid 阅读(212) 评论(0) 推荐(0)
摘要:跑出可行流后从原来的汇点向原来的源点跑最大流,原图最小流=inf-maxflow。显然超源超汇的相关边对其也没有影响。原图最小流=可行流-原图新增流量,因为t向s流量增加相当于s向t流量减少。但为什么等于inf-maxflow呢?显然最大流会把这条inf边跑满,这样会增加inf-可行流的流量,然后又 阅读全文
posted @ 2018-08-04 23:08 Gloid 阅读(450) 评论(1) 推荐(0)
摘要:考虑有源汇上下界可行流:由汇向源连inf边,那么变成无源汇图,按上题做法跑出可行流。此时该inf边的流量即为原图中该可行流的流量。因为可以假装把加上去的那些边的流量放回原图。 此时再从原来的源向原来的汇跑最大流。超源超汇相关的边已经流满不会再退流,则下界可以满足,并且在此基础上增广是可以保证原图的流 阅读全文
posted @ 2018-08-04 22:59 Gloid 阅读(554) 评论(0) 推荐(0)
摘要:假设初始流为每条边的下界。但这样可能流量会不守恒,我们需要在上面加上一个附加流使流量守恒。只要让每个点开始的出/入流量与原初始流相等就可以求出附加流了。那么新建超源S超汇T,令degree[i]表示流入i的边的下界之和-从i流出的边的下界之和。 若degree[i]>0,则表示需要有额外degree 阅读全文
posted @ 2018-08-04 22:00 Gloid 阅读(486) 评论(0) 推荐(0)
摘要:注意到怼大佬的操作至多只能进行两次。我们逐步简化问题。 首先令f[i][j]表示第i天结束后自信值为j时至多有多少天可以进行非防御操作(即恢复自信值之外的操作)。这个dp非常显然。由于最终只需要保证存活,那么取f中的最大值即可(可以在第n天之前使大佬自信值为0而结束),之后就不用再管自己的自信值。复 阅读全文
posted @ 2018-08-04 20:53 Gloid 阅读(366) 评论(0) 推荐(0)
摘要:可以发现这个写挂的树状数组求的是后缀和。find(r)-find(l-1)在模2意义下实际上查询的是l-1~r-1的和,而本来要查询的是l~r的和。也就是说,若结果正确,则a[l-1]=a[r](mod 2)。 一个很容易想到的思路是线段树维护每一位为1的概率。然而这其实是不对的,因为每一位是否为1 阅读全文
posted @ 2018-08-04 17:37 Gloid 阅读(220) 评论(0) 推荐(0)
摘要:把每个人的监视范围看成点,相邻的两个监视范围连边,那么跑一遍最短路就可以了(事实上边权都为1可以直接bfs)。显然存在最优路线没有某个时刻同时被多于两人监视,要到达另一个区域的话完全可以经过分界线而不是和其他区域的交点(若两个区域只有一个交点的话是不能直接到达的),总之就是说不用特判同时被多人监视的 阅读全文
posted @ 2018-08-04 12:28 Gloid 阅读(300) 评论(0) 推荐(0)
摘要:两个多月之前写的题,今天因为看到一道非常相似的题就翻出来了,发现完全不会,没救。 感觉这个题其实第一步是最难想到的,也是最重要的。 设d=gcd(a,b)。那么a=yd,b=xd,且gcd(x,y)=1。a+b|ab等价于x+y|xyd。 由gcd(x,y)=1,得gcd(x+y,y)=gcd(x, 阅读全文
posted @ 2018-08-03 21:51 Gloid 阅读(189) 评论(0) 推荐(0)
摘要:显然答案就是最小割。直接跑dinic也能过,不过显得不太靠谱。 考虑更正确的做法。作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边。于是我们把空白区域看成点,隔开他们的边看成边,原图的最小割就是这张新图中能割开原起点和终点的两个区域之间的最短路。 建出来的新图就是原图的 阅读全文
posted @ 2018-08-03 19:52 Gloid 阅读(216) 评论(0) 推荐(0)
摘要:一个显然的暴力是用并查集记录哪些位之间是相等的。但是这样需要连nm条边,而实际上至多只有n条边是有用的,冗余过多。 于是考虑优化。使用类似st表的东西,f[i][j]表示i~i+2^j-1与f[i][j]~f[i][j]+2^j-1连接起来了,也就是把这一大段看成一个点所建立的并查集。那么每个限制只 阅读全文
posted @ 2018-08-03 13:27 Gloid 阅读(153) 评论(0) 推荐(0)
摘要:模板。注意若x=y不一定是废话,x=0或x=0表示x必须为0。以及数组开2n。 阅读全文
posted @ 2018-08-03 10:45 Gloid 阅读(185) 评论(0) 推荐(0)
摘要:开店简化版。 阅读全文
posted @ 2018-08-03 10:19 Gloid 阅读(205) 评论(0) 推荐(0)
摘要:考虑这样一个问题:一棵树初始全是白点,有两种操作:把一个点染黑;询问某点到所有黑点的距离之和。 注意到树上两点x和y的距离为depth[x]+depth[y]-depth[lca(x,y)]*2。要求出上面的东西,depth[x]+depth[y]可以很简单的算出来,关键在于depth[lca(x, 阅读全文
posted @ 2018-08-03 02:58 Gloid 阅读(251) 评论(0) 推荐(0)
摘要:要统计所有路径的信息,那我们考虑点分治,每次算经过分治中心的路径的贡献。然而路径的颜色数量实在是不好统计,既然只需要求从每个点出发的所有路径的颜色数量之和,那换一种思路,改为求从每个点出发包含某种颜色的路径数量之和。这两者显然是等价的。 考虑在点分治过程中怎么算这个东西。首先算出每种颜色被多少条由根 阅读全文
posted @ 2018-08-02 18:30 Gloid 阅读(283) 评论(0) 推荐(0)
摘要:先看t=1的情况。显然得求出SA(因为我不会SAM)。我们一位位地确定答案。设填到了第len位,二分这一位填什么之后,在已经确定的答案所在的范围(SA上的某段区间)内二分,找到最后一个小于当前串的后缀,那么从区间左端点到该位置的这些后缀的所有前缀都要比二分出的答案小,判一下是否合法。确定了这一位填什 阅读全文
posted @ 2018-08-02 13:16 Gloid 阅读(245) 评论(0) 推荐(0)
摘要:显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数。设该平均数为t。 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断开了。假装现在我们已经知道了1号小朋友要给n号小朋友x颗糖果(可以为负)。那么,2给1,3给2,4给 阅读全文
posted @ 2018-08-01 21:44 Gloid 阅读(190) 评论(0) 推荐(0)
摘要:每个点出度都为1,可以发现这张图其实是个环套树森林,树中儿子指向父亲,环上边同向。 首先自环肯定是没救的,先抬出去。 要使死亡人数最多的话,显然若一个点入度为0其不会死亡,而一个孤立的环至少会留下一个点。对于环套树,若某个点有子树,可以以瞄准它的点为起点,每个点都被在环上瞄准他的点所击中。这样就剩下 阅读全文
posted @ 2018-08-01 19:56 Gloid 阅读(283) 评论(0) 推荐(0)
摘要:首先把每32位压成一个unsigned int(当然只要压起来能过就行)。如果不考虑进/退位的话,每次只要将加/减上去的数拆成两部分直接单点修改就好了。那么考虑如何维护进/退位。可以发现进位的过程其实就是将一段连续的inf改为0,并把之后一位+1,也就是说只要找到某一位之后第一个不是inf的位就好了 阅读全文
posted @ 2018-08-01 13:31 Gloid 阅读(139) 评论(0) 推荐(0)