
----------常用技术----------
文章平均质量分 54
IcePrincess_1968
这个作者很懒,什么都没留下…
展开
-
Codeforces #1016B: Segment Occurences 题解
DescriptionYou are given two strings s and t, both consisting only of lowercase Latin letters.The substring s[l..r] is the string which is obtained by taking characters sl,sl+1,…,sr without changing...原创 2018-08-05 17:46:24 · 479 阅读 · 0 评论 -
UOJ #316: 泳池 题解
我觉得这个dp还挺难的 首先计算面积恰好为k的比较难办,不妨容斥,计算面积不大于k的,减去面积不大于k-1的就是恰好为k的 对于一个段,我们关心的显然是最下面的危险区域,因为上面的对最终的矩形划分是没有影响的 考虑dp[i][j]表示考虑宽度为j的区间,前i-1行都没有危险区域,第i行有危险区域,能圈出的最大面积不大于k的概率,这里的概率暂时不考虑1~i-1行都不危险的那部分的q的若干次方 ...原创 2018-07-12 23:04:27 · 279 阅读 · 0 评论 -
51Nod1766: 树上的最远点对 题解
这题用到了树的直径的非常好的性质,有必要记录 树的直径满足这样一个性质: 设一棵树的一个点集SSS的直径的端点集合是{a1,b1a1,b1a_1,b_1}(如果有多条直径选取任意一条),另一个点集TTT的直径的端点集合是{a2,b2a2,b2a_2,b_2},则点集S⋃TS⋃TS\bigcup T的直径的端点集合{a3,b3a3,b3a_3,b_3}∈∈\in{a1,b1,a2,b2a1,b1...原创 2018-07-11 23:16:04 · 353 阅读 · 0 评论 -
CodeChef QRECT: Rectangle Query 题解
这题的思路还是挺巧妙的 最关键的一步是我们改求与当前矩形不相交的矩形个数 那么显然可以容斥,用完全在上面的+下面的+左面的+右面的-四个角上被重复算的 前面的四个比较好搞,以上面举例,插入矩形时把矩形的下边界插入树状数组,查询时抓住当前矩形的上边界在树状数组里查就好了 四个角的部分,以左上角为例,插入矩形时把矩形的右下角记录下来,查询时查矩形的左上角的左上方有多少个点 所以现在相当于要实...原创 2018-05-25 23:49:32 · 612 阅读 · 4 评论 -
AtCoder Grand Contest 024E: Sequence Growing Hard 题解
神仙题,感觉思路太神奇 题目等价于每次向序列里面插入一个新数,问有多少种方案 我们考虑怎样插入一个新数是合法的,假设当前插入的数是cur,那么有两种情况 1. cur放在序列的末尾 2. cur之后第一个与cur不一样的数比cur小(或者cur后面的数全都和cur一样) 我们发现改一下这个问题的初始条件,不是空序列,而是一个包含一个0的序列,这两种情况就变成只有第二种情况了,而且括号里的...原创 2018-05-21 20:32:09 · 463 阅读 · 0 评论 -
TopCoder SRM461C: FencingGarden 题解
我们首先可以发现一个性质:因为只会有两个小段是被切出来的,而篱笆有三条边,所以必然有一条边是由未被切割的篱笆构成的 我们设这条边的长度为x,所有篱笆的长度和为s,有两种情况 1. 这条边与墙平行,则面积S=xs−x2=−12x2+12sxS=xs−x2=−12x2+12sxS=x \frac{s-x}{2}=-\frac{1}{2}x^2+\frac{1}{2}sx 2. 这条边与墙垂直,则...原创 2018-05-20 22:08:31 · 349 阅读 · 1 评论 -
AtCoder Regular Contest #097C: K-th Substring 题解
总共有N2N2N^2个字符串,每两个字符串比较的复杂度是O(n)O(n)O(n),所以全部拉出来排序的复杂度是O(n3logn)O(n3logn)O(n^3logn),不能通过 但注意到题目的限制条件k≤5k≤5k\leq 5,我们考虑到一个串的前缀的字典序一定比它小,所以最后答案字符串的长度不会超过5 所以我们把所有长度不超过5的字符串拉出来排序就好,注意去重,复杂度O(n2logn)O(n...原创 2018-05-14 15:35:41 · 389 阅读 · 2 评论 -
Codeforces GYM 101173B: Bipartite Blanket 题解
这题的大致思路肯定是左边和右边分开来枚举然后匹配匹配算一算这类的 我刚开始想的是先把完美匹配搞出来,然后在里面选点 但发现无论是选点还是找匹配复杂度都是炸的 我们开始直接考虑那些被选中的点 我们发现一些很好的性质:一个集合XXX满足题意,当且仅当它属于X的部分和属于Y的部分都能形成完美匹配 必要性是显然的,如果不存在的话就不可能有一个完美匹配能覆盖这些点 充分性想一想也挺简单的,这里就...原创 2018-04-27 10:42:02 · 400 阅读 · 1 评论 -
Codeforces #963D: Frequency and String 题解
看到∑len≤100000∑len≤100000\sum len\leq 100000,考虑根号暴力 考虑所有的匹配串,分成长度大于n−−√n\sqrt{n}和小于n−−√n\sqrt{n}的两类对于第一类,他的较好的性质是串的个数小于n−−√n\sqrt n,我们考虑对这些串建立AC自动机,然后在用母串跑匹配的时候,我们不沿着fail边向上更新标记(因为深度可能很大会超时)我们只在母串...原创 2018-04-27 08:57:36 · 409 阅读 · 1 评论 -
POJ1201: Intervals 题解
差分约束系统的经典题,感觉还挺巧妙的 设d[i]d[i]d[i]表示0~i的格子中选了多少个数,那么题目中的每个区间就能变成这样的条件:d[b[i]]−d[a[i]−1]≥c[i]d[b[i]]−d[a[i]−1]≥c[i]d[b[i]]-d[a[i]-1]\geq c[i] 然后发现如果某个a[i]=0a[i]=0a[i]=0的话会出现d[−1]d[−1]d[-1],所以微调一下定义:设d[...原创 2018-04-10 10:55:22 · 307 阅读 · 0 评论 -
BZOJ4753: 最佳团体 题解
首先肯定是01分数规划,先二分答案,设当前答案是xxx,那么每个点的权值就是ai−xbiai−xbia_i-xb_i,我们要在树上取一个包含节点0的大小为k+1k+1k+1的连通块(因为有0所以+1),使得权值最大,然后看这个最大权值是否大于等于0 这个可以考虑树型背包 这个看上去是O(n3)O(n3)O(n^3)的,但有一个小技巧可以让他变成O(n2)O(n2)O(n^2) 我们考虑一个和...原创 2018-04-09 21:42:48 · 266 阅读 · 0 评论 -
POJ2976: Dropping Tests 题解
经典的01分数规划问题 01分数规划通常解决这样的问题 给定nnn个元素,每个元素都有两个属性值aiaia_i,bibib_i,要选出其中的k个c1,c2...ckc1,c2...ckc_1,c_2...c_k,最大化∑ki=1aci∑ki=1bci∑i=1kaci∑i=1kbci\frac{\sum_{i=1}^{k}a_{c_i}}{\sum_{i=1}^kb_{c_i}} 解决这样的问...原创 2018-04-09 15:52:16 · 238 阅读 · 0 评论 -
BZOJ2733: 永无乡 题解
考虑线段树合并,初始的时候对每个点建一棵动态开点线段树,merge两棵线段树的时候只要像这样操作:如果root1和root2中有一个为0,则直接返回另一个递归的调用merge处理左子树和右子树下面简证这样的复杂度是O(nlogn)O(nlogn)O(nlogn) 刚开始每棵线段树中只有一个元素,所以每棵线段树只有lognlognlogn个节点,所以刚开始的总结点数是nlognnlo...原创 2018-04-09 13:29:58 · 233 阅读 · 0 评论 -
Codeforces #778C: Peterson Polyglot 题解
考虑启发式合并 对于每个点,我们考虑删去它以后,它的子树们合并之后能减少多少个点,每次把小子树向大子树合并即可,这个点的贡献加到它所在的深度中 最后统计一波答案即可 下面简证为什么这样启发式合并的复杂度是O(nlogn)O(nlogn)O(nlogn)的 我们考虑某一个节点u,他可能会在若干次合并操作中被用到,具体来说,它会在它的若干祖先中以不同的深度被用到 假设节点u在若干子树中深度分...原创 2018-04-08 13:26:24 · 497 阅读 · 0 评论 -
AtCoder Grand Contest 002D: Stamp Rally 题解
可以想到一种朴素的做法: 对于每个询问,我二分答案,然后将编号小于答案的边都加入并查集,最后判断一下u和v所在的连通块大小之和是否大于z就可以了(注意如果u和v在一个连通块中只能算一次),这样的复杂度是O(q∗n∗logn)O(q∗n∗logn)O(q*n*logn),需要优化 考虑这个方法的效率瓶颈,主要是我们对各个询问进行计算的时候,很多次二分的答案都是一样的,对于这样二分出同样答案的状态...原创 2018-04-02 21:28:48 · 363 阅读 · 0 评论 -
POJ1741: Tree 题解
点分治模板题 md写挂了好多回,注意solve函数和dfs函数的写法有区别!root是不用判father的#include <cstdio>#include <iostream>#include <vector>#include <cstring>#include <algorithm>#define x first...原创 2018-03-29 22:30:10 · 240 阅读 · 0 评论 -
BZOJ3611: 大工程 题解
虚树模板题构建虚树的流程大概是这样的0. 对原树跑dfs序1. 把当前给的点按照dfs序排序,维护一个栈存储还没有连好边的点2. 枚举每一个点,对于当前轮,求出当前点i与栈顶元素top的lca3. 只要当前的lca是栈顶元素的祖先(即深度比它浅)就相当于那一条链上的信息已经处理完了,我就把它弹出,存到一个rev数组里4. 将rev数组里的元素从后向前顺序连边5. 如果lca与当前栈顶元素不相等,把...原创 2018-03-23 13:44:25 · 233 阅读 · 0 评论