随笔分类 -  OI题解

摘要:题目链接: BZOJ - 3236 BZOJ - 3809算法一:莫队首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队。这样每次端点移动添加或删除一个数字,用树状数组维护所求的信息就是很容易的。由于这里有 logn复杂度,所以这样移动端点的复杂度还是挺高... 阅读全文
posted @ 2015-01-24 18:53 JoeFan 阅读(419) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2821题目分析因为强制在线了,所以无法用莫队..可以使用分块来做。做法是,将 n 个数分成 n/x 个块,每个块大小为 x 。先预处理出 f[i][j] ,表示从第 i 个块到第 j 个块的出现次数为偶数的数的个数。这个复杂度是 n * (n / x) 的。然后把数与位置存... 阅读全文
posted @ 2015-01-24 11:11 JoeFan 阅读(381) 评论(0) 推荐(0)
摘要:题目链接: BZOJ - 2350题目分析因为存在一个 2/3 n 大小的团,所以不在这个团中的点最多 1/3 n 个。牺牲一些团内的点,每次让一个团内的点与一个不在团内的点抵消删除,最多牺牲 1/3 n 个团内的点,至少剩余一个 1/3 n 的团。如果两个点之间没有边,那么至少有一个点在团外,删掉... 阅读全文
posted @ 2015-01-21 20:10 JoeFan 阅读(198) 评论(0) 推荐(0)
摘要:题目链接: BZOJ - 1033题目分析模拟!纯粹按照题目描述模拟!这是一道喜闻乐见的经典模拟题!我一共写了2遍,Debug 历时2天的所有晚自习 ... 时间超过 8h ... 我真是太弱了啊 ...最终对着数据和 std 终于找到错误了!错误:好好读题!不要忽略题意中的细节!在函数中提前退出的... 阅读全文
posted @ 2015-01-21 16:01 JoeFan 阅读(583) 评论(0) 推荐(0)
摘要:题目链接: BZOJ - 3209题目大意设 f(x) 为 x 的二进制表示中 1 的个数。给定 n ,求∏ f(i) (1 #include #include #include #include #include using namespace std;typedef long long LL... 阅读全文
posted @ 2015-01-19 17:12 JoeFan 阅读(265) 评论(0) 推荐(0)
摘要:题目链接:CF#286 - A这场CF就这样爆零了...我真是太蒟蒻了...题目分析比赛的时候看到A题就发现不会,之后一直也没想出来,于是就弃了,还好不提交也不掉Rating...比赛后看评论,看到有人说“I could not even solve the problem A, shame on ... 阅读全文
posted @ 2015-01-19 14:39 JoeFan 阅读(261) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1833题目分析数位DP ..用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k 。然后差分询问...Get()中注意一下,如果固定了第 i 位,这一位是 t ,那么数码 t 的答案是要加一个值的(见代码)。代码#include #include ... 阅读全文
posted @ 2015-01-18 17:17 JoeFan 阅读(382) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1026题目分析这道题是一道数位DP的基础题,对于完全不会数位DP的我来说也是难题..对于询问 [a,b] 的区间的答案,我们对询问进行差分,求 [0,b] - [0,a-1] 的答案。这样就化繁为简了。具体过程见代码中的注释。代码#include #include #inc... 阅读全文
posted @ 2015-01-18 11:43 JoeFan 阅读(252) 评论(0) 推荐(0)
摘要:题目链接: BZOJ - 3626题目分析考虑这样的等价问题,如果我们把一个点 x 到 Root 的路径上每个点的权值赋为 1 ,其余点的权值为 0,那么从 LCA(x, y) 的 Depth 就是从 y 到 Root 的路径上的点权和。这个方法是可以叠加的,这是非常有用的一点。如果我们把 [l, ... 阅读全文
posted @ 2015-01-16 16:39 JoeFan 阅读(733) 评论(0) 推荐(0)
摘要:题目链接: BZOJ - 1576题目分析首先Orz Hzwer的题解。先使用 dijikstra 求出最短路径树。那么对于一条不在最短路径树上的边 (u -> v, w) 我们可以先沿树边从 1 走到 u ,再走这条边到 v ,然后再沿树边向上,可以走到 (LCA(u, v), v] 的所有点 (... 阅读全文
posted @ 2015-01-16 09:59 JoeFan 阅读(302) 评论(0) 推荐(0)
摘要:题目链接: BZOJ - 2819题目分析我们知道,单纯的 Nim 的必胜状态是,各堆石子的数量异或和不为 0 。那么这道题其实就是要求求出树上的两点之间的路径的异或和。要求支持单点修改。方法一:树链剖分这道题用树链剖分显然是可以做的,并且也很好写。我刚开始写完之后又 WA 了,又是线段树写错了!!... 阅读全文
posted @ 2015-01-15 18:37 JoeFan 阅读(339) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 2243题目分析树链剖分...写了200+行...Debug了整整一天+...静态读代码读了 5 遍 ,没发现错误,自己做小数据也过了。提交之后全 WA 。————————————— 杯具的分割线 —————————————————然后看了别人代码。。然后发现。。我写线段树区... 阅读全文
posted @ 2015-01-15 10:11 JoeFan 阅读(248) 评论(0) 推荐(0)
摘要:题目链接:HDOJ - 5160题目分析第一眼看上去,要求统计所有不同排列对答案的贡献。嗯...完全没有想法。但是,如果我们对每个数字单独考虑,计算这个数字在总答案中的贡献,就容易多了。对于一个数字 ai ,有 ni 个 。比它大的数字有 p 个,比它小的数字有 q 个。所有的数字一共有 N 个。首... 阅读全文
posted @ 2015-01-13 17:13 JoeFan 阅读(280) 评论(0) 推荐(0)
摘要:题目链接:HDOJ - 5159这道题的做法太多了..BC的第二题也是可以非常水的..算法一我在比赛的时候写的算法是这样的..预处理出所有的答案,然后对于每个询问直接输出。询问 (a, b) 记作 (a, b) 。(a, b) 的答案是由 (a, b-1) 的答案推出的。(a, 1) 的答案是 1 ... 阅读全文
posted @ 2015-01-11 16:36 JoeFan 阅读(187) 评论(0) 推荐(0)
摘要:题目链接:POJ - 2774题目分析题目要求求出两个字符串的最长公共子串,使用后缀数组求解会十分容易。将两个字符串用特殊字符隔开再连接到一起,求出后缀数组。可以看出,最长公共子串就是两个字符串分别的一个后缀的 LCP ,并且这两个后缀在 SA 中一定是相邻的。那么他们的 LCP 就是 Height... 阅读全文
posted @ 2015-01-10 16:16 JoeFan 阅读(218) 评论(0) 推荐(0)
摘要:---恢复内容开始---题目链接:BZOJ - 1692题目分析首先,有个比较简单的贪心思路:如果当前剩余字符串的两端字母不同,就选取小的字母,这样显然是正确的。然而若两端字母相同,我们怎么选取呢?这时我们要从两端分别向内部比较,看那一端向内的字符串字典序小。比如这个字符串 ABCDBA,从左端向内... 阅读全文
posted @ 2015-01-10 15:07 JoeFan 阅读(260) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 3238题目分析显然,这道题就是求任意两个后缀之间的LCP的和,这与后缀数组的联系十分明显。求出后缀数组后,求出字典序相邻两个后缀的LCP,即 Height 数组。那么我们可以用这个 Height 数组求出所有后缀之间 LCP 的和。我们用 f[i] 表示字典序第 i 的后缀... 阅读全文
posted @ 2015-01-10 10:54 JoeFan 阅读(188) 评论(0) 推荐(0)
摘要:题目链接:HDOJ - 5155题目大意有一个 n * m 的棋盘,已知每行每列都至少有一个棋子,求可能有多少种不同的棋子分布情况。答案对一个大素数取模。题目分析算法1: 使用容斥原理与递推。 首先,一个 n * m 的棋盘不考虑任何限制时,可能的分布情况为 2^(n*m) ,除去没有棋子的情况... 阅读全文
posted @ 2015-01-04 13:47 JoeFan 阅读(241) 评论(0) 推荐(0)
摘要:题目链接:UOJ - 51据说这题与 CF 39E 类似。题目分析一看题目描述,啊,博弈论,不会!等待爆零吧...这时,XCJ神犇拯救了我,他说,这题可以直接搜啊。注意!是用记忆化搜索,状态为 (a, b) 。是这样的:我们从后面倒着推,对于一个无法再增加 a 或 b 的 (a, b) 状态,当前走... 阅读全文
posted @ 2015-01-02 22:59 JoeFan 阅读(339) 评论(0) 推荐(0)
摘要:题目链接:BZOJ - 1854题目分析方法一:这道题目有一种巧妙的使用并查集的做法 : 我们把每个数看作一个点,那么开始时每个点单独作为一个集合。对于每个卡片 (a,b) ,就是 a 与 b 之间连了一条边。(这里不是卡片是武器...不过都一样)那么在一个联通分量中,如果这个联通分量点数为 n ,... 阅读全文
posted @ 2014-12-30 22:49 JoeFan 阅读(511) 评论(0) 推荐(0)