04 2015 档案

摘要:与最长上升子序列相关的网络流问题:给定一个序列 A[1..n] ,求出 A 的最长上升子序列长度。并且回答下列询问:(1) 如果每个点只能用一次,能从 A 中取出几个最长上升子序列?(2) 如果第 1 个点和第 n 个点可以用任意次,能从 A 中取出几个最长上升子序列?(3) 如果每个点有一个删除代... 阅读全文
posted @ 2015-04-28 09:14 JoeFan 阅读(388) 评论(4) 推荐(0)
摘要:题目链接:HDOJ - 5212题目分析首先的思路是,考虑每个数对最终答案的贡献。那么我们就要求出:对于每个数,以它为 gcd 的数对有多少对。显然,对于一个数 x ,以它为 gcd 的两个数一定都是 x 的倍数。如果 x 的倍数在数列中有 k 个,那么最多有 k^2 对数的 gcd 是 x 。同样... 阅读全文
posted @ 2015-04-26 22:55 JoeFan 阅读(442) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3530题目分析明显是 AC自动机+DP,外加数位统计。WZY 神犇出的良心省选题,然而去年我太弱..比现在还要弱得多..其实现在做这道题,我自己也没想出完整解法..就想出了个 O(l^3) 的做法:完全按照数位统计的思想来,先统计长度不足 len 的数字的合法种类数,这个枚... 阅读全文
posted @ 2015-04-26 11:19 JoeFan 阅读(364) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3531题目分析题目询问一条路径上的信息时,每次询问有某种特定的文化的点。每个点的文化就相当于一种颜色,每次询问一条路径上某种颜色的点的信息。可以使用离线算法, 类似于“郁闷的小 J ” 那道题目。将各种操作和询问按照颜色为第一关键字,时间为第二关键字排序。那么修改颜色的操作... 阅读全文
posted @ 2015-04-25 21:27 JoeFan 阅读(315) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1014题目分析求两个串的 LCP ,一种常见的方法就是 二分+Hash,对于一个二分的长度 l,如果两个串的长度为 l 的前缀的Hash相等,就认为他们相等。这里有修改字符和插入字符的操作,所以用 Splay 来维护串的 Hash 值。一个节点的值就是它的子树表示的字串的 ... 阅读全文
posted @ 2015-04-24 21:08 JoeFan 阅读(303) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3995题目分析这道题..是我悲伤的回忆..线段树维护连通性,与 BZOJ-1018 类似,然而我省选之前并没有做过 1018,即使它在 ProblemSet 的第一页。更悲伤的是,这道题有 40 分的暴力分,写个 Kruskal 就可以得到,然而我写了个更快的 DP 。这本... 阅读全文
posted @ 2015-04-24 16:02 JoeFan 阅读(432) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1086题目分析这道题要求给树分块,使得每一块的大小在 [B, 3B] 之间,并且可以通过一个块外的节点(块根)使得整个块联通。那么我们使用一种 DFS,维护一个栈,DFS 完一个节点 x 的所有子树后,就将 x 压入栈内。我们不能简单的判断栈内元素 >= B 就将栈中的元素... 阅读全文
posted @ 2015-04-24 15:39 JoeFan 阅读(264) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3669题目分析如果确定了带 x 只精灵A,那么我们就是要找一条 1 到 n 的路径,满足只经过 Ai #include #include #include #include #include using namespace std;inline void Read(int ... 阅读全文
posted @ 2015-04-23 17:44 JoeFan 阅读(364) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2594题目分析这道题如果没有删边的操作,那么就是 NOIP2013 货车运输,求两点之间的一条路径,使得边权最大的边的边权尽量小。那么,这条路径就是最小生成树上这两点之间的路径。然而现在有了删边操作,我们就需要一直维护当前的最小生成树。删边然后维护 MST 还是不会做的,但... 阅读全文
posted @ 2015-04-23 15:45 JoeFan 阅读(331) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2631题目分析LCT,像线段树区间乘,区间加那样打标记。这道题我调了一下午。提交之后TLE了,我一直以为是写错了导致了死循环。于是一直在排查错误。直到..直到我看了hzwer的博客,就一句话:“其实这题不需要开long long。。。只要unsigned int,不然可能会... 阅读全文
posted @ 2015-04-22 17:48 JoeFan 阅读(237) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3282题目分析这道题是裸的LCT,包含 Link , Cut 和询问两点之间的路径信息。写代码时出现的错误:Access(x) 的循环中应该切断的是原来的 Son[x][1] ,然而我写成了 Son[x][0] !代码#include #include #include #... 阅读全文
posted @ 2015-04-22 10:32 JoeFan 阅读(220) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2049题目分析LCT的基本模型,包括 Link ,Cut 操作和判断两个点是否在同一棵树内。Link(x, y) : Make_Root(x); Splay(x); Father[x] = y;Cut(x, y) : Make_Root(x); Access(y); 断掉 ... 阅读全文
posted @ 2015-04-21 21:07 JoeFan 阅读(279) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1036题目分析这道题可以用树链剖分,块状树等多种方法解决,也可以使用 LCT。修改某个点的值时,先将它 Splay 到它所在的 Splay 的根,然后修改它的值,再将它 Update 一下。(1)询问 x, y 两点之间的路径时,假设 x 是深度小的那一个,先 Access... 阅读全文
posted @ 2015-04-21 19:19 JoeFan 阅读(417) 评论(0) 推荐(0)
摘要:题目链接:HDOJ - 5208题目分析使用按位贪心的思想,即从高位向低位枚举,尽量使这一位的答案为 1 。我们使用 DFS ,每次就是对于 [l1, r1] [l2, r2] x 进行处理,其中,x 是当前处理的最高位的权值,即 2^i 。如果 A 和 B 两人的区间的最高位都确定了,那就记录这一... 阅读全文
posted @ 2015-04-20 16:37 JoeFan 阅读(254) 评论(0) 推荐(0)
摘要:题目链接:Vijos - P1943题目分析这是 AHOI 普及组的题目,然而我并不会做= =弱到不行= =首先,从 (x, 0) 到 (0, y) 的最短路,一定是只能向左走和向上走,那么用组合数算一下方案数是 C(x + y, x) ,记为 Solve(x, y), 其实就是将 y 次向上走分配... 阅读全文
posted @ 2015-04-19 17:28 JoeFan 阅读(648) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1018题目分析这道题就说明了刷题少,比赛就容易跪..SDOI Round1 Day2 T3 就是与这道题类似的..然而我并没有做过这道题..这道题是线段树维护联通性的经典模型。我们线段树的一个节点表示一个区间的联通性,有 6 个 bool 值,表示这个区间的 4 个角上的点... 阅读全文
posted @ 2015-04-17 23:37 JoeFan 阅读(351) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3942题目分析我们发现,删掉一段 T 之后,被删除的部分前面的一段可能和后面的一段连接起来出现新的 T 。所以我们删掉一段 T 之后应该接着被删除的位置之前的继续向后匹配。那么我们维护一个栈,一直向后匹配,如果栈顶出现了 T ,就弹出 T 个字符,然后继续从新的栈顶向后匹配... 阅读全文
posted @ 2015-04-17 09:51 JoeFan 阅读(337) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3888题目分析首先,计算出每个线段在 x 坐标 0 处出现的时间开始点和结束点,就转成了时间轴上的线段。然后就是看每条线段是否被 y 比它小的线段完全覆盖了。注意求出的时间点要离散化,然后应该使用时间轴上的区间来表示,两线段端点重合并不是有共同部分。将所有线段按照 y 从小... 阅读全文
posted @ 2015-04-17 09:33 JoeFan 阅读(417) 评论(0) 推荐(1)
摘要:题目链接:BZOJ - 3620题目分析这道题使用 KMP 做 O(n^2) 的暴力就能过。首先,我们依次枚举字串左端点 l ,然后从这个左端点开始向后做一次 KMP。然后我们枚举右端点 r,符合条件的右端点 r 就是 S[l..r] 这一段的一个前缀和后缀相同,并且这一部分的长度 x 要满足 k ... 阅读全文
posted @ 2015-04-16 21:24 JoeFan 阅读(1617) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3564题目分析求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值。那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 x 坐标除以长轴与短轴的比值,然后就直接做最小圆覆盖了。随机增量法,一定别忘了 random_shuff... 阅读全文
posted @ 2015-04-15 16:02 JoeFan 阅读(468) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3489题目分析“因为是OJ上的题,就简单点好了。”——出题人真的..好..简单...首先,我们求出每个数的前一个与它相同的数的位置,即 prev[i] ,如果前面没有相同的数,prev[i] = 0。再求出每个数的后一个与它相同的数的位置,即 next[i], 如果后面没有... 阅读全文
posted @ 2015-04-15 14:43 JoeFan 阅读(511) 评论(0) 推荐(0)
摘要:这篇博客用来贴对神犇们的仰慕与Orz~截图中神犇们的ID可能带有“蒟蒻”等词语,都是神犇们为了装弱而设定的群名片。 阅读全文
posted @ 2015-04-14 20:49 JoeFan 阅读(883) 评论(5) 推荐(1)
摘要:题目链接:BZOJ - 1907题目分析使用树形 DP,f[x][0] 表示以 x 为根的子树不能与 x 的父亲连接的最小路径数(即 x 是一个折线的拐点)。f[x][1] 表示以 x 为根的子树可以与 x 的父亲连接的最小路径数。转移的方式非常巧妙,Orz PoPoQQQ 的 blog 。代码#i... 阅读全文
posted @ 2015-04-14 16:16 JoeFan 阅读(333) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1221题目分析算法一:最小费用最大流首先这是一道经典的网络流问题。每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾。然后 i 向 T 连 Ai (第 i 天需要的毛巾数)。从 S 向 i' 连 Ai ,这样这天新增的用过的毛巾就是 Ai 了。然后 i... 阅读全文
posted @ 2015-04-14 11:18 JoeFan 阅读(391) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3585题目分析区间mex,即区间中没有出现的最小自然数。那么我们使用一种莫队+分块的做法,使用莫队维护当前区间的每个数字的出现次数。然后求mex用分块,将权值分块(显然mex 一定小于等于 n ,大于 n 的权值没有意义,可以直接忽略),每块大小 sqrt(n) 。然后区间... 阅读全文
posted @ 2015-04-13 17:22 JoeFan 阅读(546) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3052题目分析这道题就是非常经典的树上莫队了,并且是带修改的莫队。带修改的莫队:将询问按照 左端点所在的块编号为第一关键字,右端点所在的块为第二关键字,位于第几次修改之后为第三关键字 排序。我们将块的大小设置在 n^(2/3) ,这样一共有 n^(1/3) 个块。最后算法的... 阅读全文
posted @ 2015-04-13 14:58 JoeFan 阅读(1034) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3144题目分析题意:在 P * Q 的方格上填数字,可以填 [1, R] 。在 (x, y) 上填 z 会有 V[x][y][z] 的代价。限制:相邻两个格子填的数字的差的绝对值不能超过 D 。求一个合法的最小总代价。这道题是一个最小割模型,直接说建图吧。建图:每个点 (x... 阅读全文
posted @ 2015-04-09 17:43 JoeFan 阅读(378) 评论(0) 推荐(1)
摘要:题目链接:BZOJ - 3894题目分析最小割模型,设定一个点与 S 相连表示选文,与 T 相连表示选理。那么首先要加上所有可能获得的权值,然后减去最小割,即不能获得的权值。那么对于每个点,从 S 向它连权值为它选文的价值的边,从它向 T 连权值为它选理的价值的边。对于一个点,它和与它相邻的点构成了... 阅读全文
posted @ 2015-04-09 16:16 JoeFan 阅读(258) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2127题目分析首先,每个人要么学文科,要么学理科,所以可以想到是一个最小割模型。我们就确定一个人如果和 S 相连就是学文,如果和 T 相连就是学理。那么我们再来确定建图。首先使用最小割,就是先加上所有可能获得的权值,再减去最小割(即不能获得的权值)。如果一个人学理,就要割掉... 阅读全文
posted @ 2015-04-09 15:35 JoeFan 阅读(343) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3198题目分析题目要求求出有多少对泉有恰好 k 个值相等。我们用容斥来做。枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x 。答案就是 sigma((-1)^(x - k) * AnsNow * C(x, k)) 。注意 x 要大于等于 k。对... 阅读全文
posted @ 2015-04-07 10:59 JoeFan 阅读(331) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2186题目分析题目要求出 [1, n!] 中有多少数与 m! 互质。(m #include #include #include #include #include using namespace std;typedef long long LL;const int MaxN... 阅读全文
posted @ 2015-04-07 09:21 JoeFan 阅读(245) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3129题目分析使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1)。如果有一个限制条件是 xi >= Ai ,那么我们就可以将 m 减去 Ai - 1 ,相当于将这一部分固定分给 xi,就转化为无限制的情况了。如果有一些限制条件是 xi ... 阅读全文
posted @ 2015-04-06 19:42 JoeFan 阅读(946) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1733题目分析直接二分这个最大边的边权,然后用最大流判断是否可以有 T 的流量。代码#include #include #include #include #include #include using namespace std; const int MaxN = 20... 阅读全文
posted @ 2015-04-04 21:50 JoeFan 阅读(262) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2440题目分析首先,通过打表之类的方法可以知道,答案不会超过 2 * k 。那么我们使用二分,对于一个二分的值 x ,求出 [1, x] 之间的可以送出的数有多少个。怎么来求呢?我们使用容斥原理。先求出不能送的数(即含有平方因子的数)有多少个,然后用总数减去就可以了。那么,... 阅读全文
posted @ 2015-04-03 20:48 JoeFan 阅读(295) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2178题目分析用Simpson积分,将圆按照 x 坐标分成连续的一些段,分别用 Simpson 求。注意:1)Eps要设成 1e-13 2)要去掉被其他圆包含的圆。代码#include #include #include #include #include #include... 阅读全文
posted @ 2015-04-02 15:39 JoeFan 阅读(420) 评论(0) 推荐(0)
摘要:题目链接: BZOJ - 1502题目分析这是我做的第一道 Simpson 积分的题目。Simpson 积分是一种用 (fl + 4*fmid + fr) / 6 * (r - l) 来拟合 fl...fr 的方法。自适应 Simpson 的自适应指的是,如果分成左右两端分别 Simpson 的和与... 阅读全文
posted @ 2015-04-02 10:08 JoeFan 阅读(386) 评论(0) 推荐(0)