Maxwei_wzj的OI世界

Imagination is more important than knowledge.
私信 关注
Maxwei_wzj
码龄5年

AFO

  • 180,448
    被访问量
  • 585
    原创文章
  • 9,963
    作者排名
  • 54
    粉丝数量
  • 于 2016-07-18 加入CSDN
获得成就
  • 获得39次点赞
  • 内容获得29次评论
  • 获得27次收藏
荣誉勋章
TA的专栏
  • 数据结构-线段树
    61篇
  • 数据结构-树状数组
    29篇
  • 数据结构-单调队列
    11篇
  • 数据结构-单调栈
    5篇
  • 数据结构-并查集
    17篇
  • 数据结构-平衡树/set
    22篇
  • 数据结构-优先队列/堆
    8篇
  • 数据结构-主席树
    18篇
  • 数据结构-左偏树/可并堆
    4篇
  • 数据结构-LCT
    5篇
  • 数据结构-分块
    11篇
  • 数据结构-KD树
    2篇
  • 数据结构-哈希表
    9篇
  • 数据结构-启发式合并
    5篇
  • 动态规划-普通DP
    48篇
  • 动态规划-数位DP
    9篇
  • 动态规划-状态压缩DP
    18篇
  • 动态规划-树形DP
    34篇
  • 动态规划-四边形不等式优化
    3篇
  • 动态规划-决策单调性优化
    5篇
  • 动态规划-斜率优化
    4篇
  • 分治-树分治
    7篇
  • 分治-CDQ分治
    5篇
  • 分治-整体二分
    4篇
  • 算法-贪心
    27篇
  • 算法-树链剖分
    14篇
  • 算法-LCA
    21篇
  • 算法-倍增
    22篇
  • 算法-模拟
    3篇
  • 算法-二分
    28篇
  • 算法-三分
    1篇
  • 算法-高精度
    7篇
  • 算法-线性规划
    2篇
  • 算法-位运算
    12篇
  • 算法-可持久化
    11篇
  • 算法-莫队算法
    8篇
  • 算法-树上差分
    4篇
  • 算法-高斯消元
    6篇
  • 算法-哈夫曼编码
    1篇
  • 算法-虚树
    6篇
  • 算法-其他算法
    2篇
  • 搜索-DFS
    28篇
  • 搜索-BFS
    10篇
  • 搜索-A*
    2篇
  • 搜索-迭代加深搜索
    4篇
  • 字符串-KMP
    6篇
  • 字符串-trie树
    7篇
  • 字符串-AC自动机
    10篇
  • 字符串-后缀自动机(SAM)
    9篇
  • 字符串-Manacher
    4篇
  • 字符串-回文自动机(PAM)
    3篇
  • 字符串-序列自动机
  • 字符串-字符串哈希
    1篇
  • 图论-最短路
    22篇
  • 图论-生成树
    12篇
  • 图论-二分图
    11篇
  • 图论-网络流
    35篇
  • 图论-差分约束系统
    3篇
  • 图论-拓扑排序
    11篇
  • 图论-强连通分量
    10篇
  • 图论-双连通分量
    7篇
  • 图论-仙人掌
    5篇
  • 图论-2-SAT
    4篇
  • 数学-数论
    52篇
  • 数学-计算几何
    15篇
  • 数学-线性代数
    26篇
  • 数学-概率期望
    30篇
  • 数学-组合数学
    53篇
  • 数学-博弈论
    8篇
  • 数学-微积分
    4篇
  • 数学-FFT/NTT/FWT
    18篇
  • 数学-其他数学
    5篇
  • 总结
    10篇
  • 心路历程
    5篇
  • 未AC题
    4篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

(2020-10-11编写)有趣的简单博弈/贪心一道

在我校历年入ACM队笔试(你没看错,是笔试)题里看到一道这样的题,挺有意思的,写出来分享分享。可能是一道非常经典的题,但我反正没见过,就写在这了。题目大意: 有2n2n2n颗石子,每颗石子有两个权值ai,bia_i,b_iai​,bi​。两个人甲、乙用这些石子玩游戏,两人轮流取石子,每一轮取一颗石子,最后每个人都取到nnn颗石子。此时,甲的分数为他取到的石子的aia_iai​之和,乙的分数为他取到的石子的bib_ibi​之和,谁分数高,谁就取得游戏的胜利。给定所有2n2n2n颗石子的ai,bia_i,b_
原创
40阅读
1评论
0点赞
发布博客于 4 月前

(2020-10-7编写)一道有趣的不难的题

没错,这篇文章不是在我学OI时写的,而是在实实在在的2020年写的。这似乎预示着我将不得不重回竞赛的怀抱了,祝我好运吧。题目大意: 对一个长为nnn的数列{an}\{a_n\}{an​},有以下两个操作:1.1.1.求和操作:数列{a1,a2,...,an}\{a_1,a_2,...,a_n\}{a1​,a2​,...,an​}变为{a1,a1+a2,...,a1+a2+...+an}\{a_1,a_1+a_2,...,a_1+a_2+...+a_n\}{a1​,a1​+a2​,...,a1​+a2​+
原创
45阅读
0评论
1点赞
发布博客于 4 月前

给2020年之后看到这篇博客的OIer们

当你看到这段文字,我已经AFO了很长时间了,而所有你们看到的在2019年之后发布的内容,都是我在竞赛时已经写好,但由于各种原因并未公开发布的内容。但现在我没有那么多顾虑了,因此我打算把这些内容陆续发出来,供更多的人学习,能帮一个是一个。我个人已经失去了学习ACM的兴趣,我也不知道在强基计划的形势下,还有没有人坚持学习OI,但如果屏幕前的你仍在坚持,那我希望我的文字能给你提供一点点帮助。就这样。...
原创
134阅读
0评论
2点赞
发布博客于 6 月前

【CF856D】Masha and Cactus-树形DP+LCA+树状数组

测试地址:Masha and Cactus题目大意: 给定一棵树,再给定mmm条边,每条边有权值,从里面选出一些边加入树中,使得形成的图是仙人掌,即每个点至多处在一个环中的图,并使得加入的边的权值和最大,求出这个最大值。做法: 本题需要用到树形DP+LCA+树状数组。首先转化一下问题。不难想到,添加一条边会使得树上的一条路径上的点被一个环覆盖,那么要使一个点至多在一个环中,也就是要求添加的边...
原创
287阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3167】SAO(HEOI2013)-高维树形DP+组合数学

测试地址:SAO题目大意: 给定一棵树边是有向边的树(边不一定从根指向儿子),求拓扑序数量。n≤1000n\le 1000n≤1000。做法: 本题需要用到高维树形DP+组合数学。如果边都是从根连向儿子的话,简单组合就可以树形DPO(n)O(n)O(n)做了,问题是这道题并不是这样的,而是一个“类树”的结构,但因为它还是棵树所以我们还是考虑树形DP。考虑用类似树形背包的做法,把子树一一合并...
原创
14阅读
0评论
0点赞
发布博客于 4 月前

【BZOJ2069】ZAW(POI2004)-最短路+二进制分组

测试地址:ZAW题目大意: 给定一张边是双向的图,一条边走不同的方向可能代价不同,代价都非负,求从点111出发,不经过重复的点或边的最小回路。n≤5000,m≤10000n\le 5000,m\le 10000n≤5000,m≤10000。做法: 本题需要用到最短路+二进制分组。不久前做过一道清华爷出的NOIP模拟题:给定一张边是双向的图,给定其中的一个点集CCC,求从CCC中某点出发,到与...
原创
25阅读
0评论
0点赞
发布博客于 4 月前

【LuoguP4719】动态DP模板-树链剖分+线段树+矩阵乘法

测试地址:动态DP做法: 本题需要用到树链剖分+线段树+矩阵乘法维护动态DP。动态DP这个东西以前听过,但当时没有看懂,现在想来觉得是卡在矩阵乘法这个地方。这里用的不是传统的矩阵乘法。一般的DP我们肯定会做,序列上的线性动态DP(可以用线性递推式递推的DP)很容易想到用线段树+矩阵乘法优化,但最大权值独立集这个经典树形DP模型要动态维护的话,有两个和上面问题不同的地方,第一是它不是序列,第二...
原创
126阅读
0评论
0点赞
发布博客于 1 年前

NOIP2018差点退役+心态爆炸杂思

本篇文章负能量程度爆表,且文字间衔接逻辑完全混乱,强烈不建议阅读。是的,我并不打算在这里写我考场上怎么想题写题,我可能只是来抒发一下我可能真的即将要退役的感慨吧…(说是感慨,可能只是对自己失败人生的吐槽和牢骚)考试前我自以为我准备不错,专门请假一天颓废调整心态,通关了Undertale和Deltarune放出的Chapter 1(Toby Fox真是个游戏鬼才),不过这貌似不是重点啊…D1考下...
原创
1354阅读
2评论
1点赞
发布博客于 3 年前

(据说是)鏼爷和吴凯路爷爷出的NOIP模拟神题集锦

鏼爷神题Day1T1 回文切割(pal)题目大意: 给定一个长为nnn(nnn是偶数)的01串sss,我们要反转里面的几位,使得这个01串能由若干偶数长度的回文串连接而成,反转第iii位的代价是wiw_iwi​,求最小代价。n≤2000n\le 2000n≤2000。做法: 本题需要用到DP。显然有区间型DP的思路,令f(i)f(i)f(i)为使长为iii的前缀满足条件的最小代价,则有:...
原创
55阅读
0评论
0点赞
发布博客于 5 月前

【BZOJ2144】跳跳棋-二分+LCA

测试地址: 跳跳棋做法: 本题需要用到二分+LCA。一道神题。注意到三个棋子可以进行一下的跳跃:1.中间的棋子跳过两边的棋子向外跳跃;2.距离中间棋子较近的那个棋子跳过中间的妻子向内跳跃。因为限制了只能跳过一个棋子,所以上面的两种跳跃方式就是全部了。而我们发现,除非两边的棋子和中间的棋子距离相等,通过第二种跳跃都只能到达一种状态,而第一种跳跃和第二种跳跃是互逆的操作,于是我们惊奇地发现:...
原创
265阅读
0评论
0点赞
发布博客于 3 年前

NOIP2018模拟赛总结(2018.10.24-2018.11.5)

文章目录2018.10.24T1 BackpackT2 SortT3 Digit2018.10.24据说是九校联考的题(虽然不知道哪九校),老师拿来考了,考得还算不错吧…T1 Backpack题目大意: 给定n(≤106)n(\le 10^6)n(≤106)个物品,每个物品有体积a(≤100)a(\le 100)a(≤100)和价格b(≤100)b(\le 100)b(≤100),同种物品...
原创
43阅读
0评论
0点赞
发布博客于 5 月前

NOI.AC之NOIP2018全国热身赛参赛实录

Day 1T1 Array题目大意: 给定一个长为n(≤107)n(\le 10^7)n(≤107)的数列
原创
37阅读
0评论
0点赞
发布博客于 5 月前

【BZOJ3093】A Famous Game-概率论+组合数学

测试地址:A Famous Game题目大意: 一个袋子里有nnn个球,球的颜色只有红和蓝,红色球的数目为000 ~ nnn的概率都是相等的。现在已经从里面取出了ppp个球,其中qqq个是红色,求下一个取出的球是红色的概率。做法: 本题需要用到概率论+组合数学。通过这道题,我终于意识到概率论这个东西真的不可能靠直觉算对…想出来这种东西的贝叶斯真是个神人…本题需要用到的公式:P(A∣B)=...
原创
278阅读
0评论
1点赞
发布博客于 3 年前

【BZOJ3619】璀灿光华(ZJOI2014)-思维+建图

测试地址:璀灿光华(BZOJ没有题面,所以贴了洛谷的测试地址)做法: 本题需要用到思维+建图。首先吐槽一下,这个题目名字是不是应该叫“璀璨”啊…算了算了,强省大佬自有用意,我这种阅读理解000分选手还是不要妄加猜测了…注意到nnn很小,可以直接暴力枚举,O(a⋅6n)O(a\cdot 6^n)O(a⋅6n)解决这个问题。这个题最难的地方在于,如何通过这些点的相互连接,得出每个点在立方体中的...
原创
236阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3351】Regions(IOI2009)-分块+vector

测试地址:Regions题目大意: 给定一棵nnn个点的有根树,每个点有颜色,qqq个询问,每次询问给出两个颜色a,ba,ba,b,表示询问树中有多少对点(u,v)(u,v)(u,v)使得uuu颜色是aaa,vvv颜色是bbb,且uuu是vvv的祖先。做法: 本题需要用到分块+vector。好题。传统数据结构貌似做不了这道题,于是想到分块。很容易想到两种暴力:1.将aaa相同的询问一起处...
原创
154阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3131】淘金(SDOI2013)-数位DP+优先队列

测试地址:淘金做法: 本题需要用到数位DP。令F(x,y)F(x,y)F(x,y)为坐标(x,y)(x,y)(x,y)上的黄金数目,那么:F(x,y)=∑i=1n∑j=1n[f(i)=x]⋅[f(j)=y]F(x,y)=\sum_{i=1}^n\sum_{j=1}^{n}[f(i)=x]\cdot[f(j)=y]F(x,y)=∑i=1n​∑j=1n​[f(i)=x]⋅[f(j)=y]=(∑...
原创
129阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4513】储能表(SDOI2016)-数位DP

测试地址:储能表做法: 本题需要用到数位DP。显然地,我们可以把问题转化成,令SumSumSum为所有≥k\ge k≥k的i xor ji\space xor\space ji xor j之和,CntCntCnt为其个数,那么答案就为Sum−k⋅CntSum-k\cdot CntSum−k⋅Cnt。具体地,我们是要计算满足这些条件:i≤n−1,j≤m−...
原创
121阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3233】找硬币(AHOI2013)-DP+数论

测试地址:找硬币做法: 本题需要用到DP+数论。假设我们有了构造出了一个合法硬币序列xxx,怎么计算最少需要使用的硬币数量?显然,因为xkx_kxk​为xk−1x_{k-1}xk−1​的倍数,能用大的就应该用大的,那么对于最大的币值xkx_kxk​,应该要使用⌊aixk⌋\lfloor\frac{a_i}{x_k}\rfloor⌊xk​ai​​⌋个,于是还剩下ai%xka_i\%x_kai​%...
原创
154阅读
0评论
0点赞
发布博客于 3 年前

【51Nod1623】完美消除-数位DP+状态压缩+单调栈

测试地址:完美消除做法: 本题需要用到数位DP+状态压缩+单调栈。对于一个数字,如何求出它的最小消除次数?把每一位一一推入单调栈(栈顶元素最大),并在最后把所有的元素都出栈,那么元素出栈的总次数就是最小消除次数。这一点做过单调栈题的同学应该很容易能看出来了。那么对于这一题,显然看出是数位DP,而且数位DP也是从高位到低位转移。我们又发现数位只有000 ~ 999这101010个数字,于是我们...
原创
123阅读
0评论
0点赞
发布博客于 3 年前

【CF840C】On the Bench-DP+组合数学

测试地址:On the Bench题目大意: 给出一个长为nnn的序列AAA,问有多少种111 ~ nnn的排列ppp,满足对于任意1≤i<n1\le i<n1≤i<n,有APi⋅APi+1A_{P_i}\cdot A_{P_{i+1}}APi​​⋅APi+1​​不为完全平方数。做法: 本题需要用到DP+组合数学。直接状压DP的复杂度应该是O(n22n)O(...
原创
134阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4773】负环-倍增+Floyd

测试地址:负环做法: 本题需要用到倍增+Floyd。我们很快能想出O(n2m)O(n^2m)O(n2m)的算法:令f(i,j,k)f(i,j,k)f(i,j,k)为走iii条边,从jjj走到kkk的路径中最小的权值和。从小到大枚举iii转移即可。然而并过不了,而且我们发现,负环的长度似乎也不是单调的,即存在长为kkk的负环,不一定表示存在长为k+1k+1k+1的负环。实际上,我们只要给每个点...
原创
139阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP4934】礼物(LGR-054)-Dilworth定理+优化建图+拓扑排序

测试地址:礼物做法: 本题需要用到Dilworth定理+优化建图+拓扑排序。对位运算感觉比较敏锐的话,可以看出,a&ba\&ba&b这个东西要么比a,ba,ba,b都小,要么就说明a,ba,ba,b中有一个在二进制位上是另一个数的子集。因为属于的关系是一种偏序关系,根据Dilworth定理,偏序反链最小覆盖等于最长偏序链,因此我们可以O(n2)O(n^2...
原创
127阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP3616】富金森林公园-线段树

测试地址:富金森林公园做法: 本题需要用到线段树。一道好题,不看题解乍一下真的不知道怎么做…我们考虑直接维护水面在高度iii时能看见的连续段数cnt(i)cnt(i)cnt(i),考虑一块石头高度的增减对cntcntcnt的影响。为了讨论方便,我们把修改操作都看成是,先把石头高度降到最低,再把石头高度升到新的高度,这样只用考虑两个过程就可以了,并且我们发现这两个过程产生的贡献完全相反,因此我...
原创
152阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1432】函数(ZJOI2009)-思维

测试地址:函数做法: 本题需要用到思维。如果在xxx坐标为负无穷时,把函数从下到上编号为111~nnn,那么在向右扫时,一旦遇到一个交点,就表示交的这两个函数上下位置进行交换。因为每两个函数间有且仅有一个交点,且不会有三个函数共点,因此这些交换是先后进行的,且一定是发生在下面的函数编号比上面的函数小时,那么最后在xxx坐标为正无穷时必定会换为从下到上nnn ~ 111的形式。于是现在要求第kk...
原创
133阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1190】梦幻岛宝珠(HNOI2007)-背包DP+思维

测试地址:梦幻岛宝珠做法: 本题需要用到背包DP+思维。这道题看上去是一个裸01背包,然而容量特别大,因此我们只能从其中唯一一个特殊条件入手:a⋅2ba\cdot 2^ba⋅2b形式的重量。我们考虑把这些物品分阶段来进行决策。我们首先对每个bbb,求出重量表示为a⋅2ba\cdot 2^ba⋅2b的那些物品中,取重量为k⋅2bk\cdot 2^bk⋅2b的物品能得到的最大总价值totval(...
原创
117阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP2576】梦幻折纸(ZJOI2005)-思维

测试地址:梦幻折纸做法: 本题需要用到思维。考虑最后折出来的正方形,从上到下的各层中,有可能有两层在前后侧相连,也有可能有两层在左右侧相连。易知,无论怎么折前后侧的相连都不会成为左右侧,这启发我们分开判断两维是不是成立。要判断某一维是不是成立,需要观察出下面两个结论:1.如果两列i,ji,ji,j相邻,最后所有a(x,i)a(x,i)a(x,i)和a(x,j)a(x,j)a(x,j)相连的...
原创
389阅读
1评论
0点赞
发布博客于 3 年前

【BZOJ1483】梦幻布丁(HNOI2009)-链表+启发式合并

测试地址:梦幻布丁做法: 本题需要用到链表+启发式合并。首先,注意到颜色的段数等于,相邻的颜色不同的元素对数+1+1+1,而一对元素一旦颜色相同就不可能再变成不同,因此我们在改变颜色的时候,只要找到这个颜色的元素周围有没有修改后就变成颜色相同的元素即可。我们想到用链表来连接同颜色的那些点,但如果进行暴力修改的话,时间复杂度最坏为O(n2)O(n^2)O(n2),怎么办呢?注意到一种颜色变成另...
原创
99阅读
0评论
0点赞
发布博客于 3 年前

NOIP2017模拟赛总结(2017.11.6-2017.11.7)

2017.11.6 Problem A 题目大意:nn个人围成一个环,编号为11~nn,从11号开始从11报数,每次报到mm时,报11~m−1m-1的人出列,下一个人继续报11,问最后留下的人的编号。保证m−1|n−1m-1|n-1。 做法:本题需要用到递归。 nn个人进行这个游戏的话,如果就这样顺着报下去,那么剩下的就只有编号为mm的倍数的人和最后n%mn\%m个人,相当于把后n%mn\%
原创
15阅读
0评论
0点赞
发布博客于 5 月前

NOIP2017模拟赛总结(2017.11.2-2017.11.5)

2017.11.2 Problem A 做法:这题按照题意大模拟,题目太繁琐就不贴了……2017.11.2 Problem B 题目大意:对于一个排列,在每两个相邻的数写上符号,如果右边的大于左边的写,否则写>>,问有多少种11~n(≤1000)n(\le 1000)的排列中恰好有kk个?结果对大素数取模,多组询问。 做法:本题需要用到DP。 令f(i,j)f(i,j)为11~ii的排
原创
19阅读
0评论
0点赞
发布博客于 5 月前

NOIP2017模拟赛总结(2017.10.30-2017.11.1)

第三篇博客,放上2017.10.30-2017.11.1的题。2017.10.30 Problem A 题目大意:把一个长为nn的非负数列分成不超过kk个区间,使得每个区间内数的和都不大于ss,求满足条件的最小的ss。 做法:显然二分ss,然后从左往右扫一遍判定即可。 以下是本人代码:#include #include #include #include #include
原创
25阅读
0评论
0点赞
发布博客于 6 月前

NOIP2017模拟赛总结(2017.10.26-2017.10.29)

嗯,这次是10.26到10.29的题,因为10.27休息了一天,所以还是3天。2017.10.26 Problem A 题目大意:有一个容积为VV的背包和nn个物品,每个物品有两个参数ai,bia_i,b_i,表示要装下这个物品需要消耗aia_i的容积,但装进去后背包的容积会扩大bib_i,问存不存在一种装物品的顺序使得能装下所有物品。 做法:本题需要用到贪心。 首先对于ai≤bia_i
原创
26阅读
0评论
0点赞
发布博客于 6 月前

NOIP2017模拟赛总结(2017.10.23-2017.10.25)

在学校模拟赛中出现了一些比较有意思的题目,在这里写出来总结一下。一篇博客就写3天,也就是9题吧。2017.10.23 Problem A 题目大意:有一列数:11~nn,每次从其中选出两个求平均值,然后放回数列中,求最后剩下的数的最大值,对大素数取模。 做法:本题需要用到贪心+数学。 首先可以证明每次选最小的两个是最优的,那么最后得到的值要怎么计算呢? 我们知道要求的式子是:((...
原创
31阅读
0评论
0点赞
发布博客于 6 月前

【CF605C】Freelancer's Dreams-凸包

测试地址:Freelancer’s Dreams题目大意: 有nnn项工作,每项工作有两项属性ai,bia_i,b_iai​,bi​,表示做111单位时间可以获得aia_iai​的经验和bib_ibi​的钱,现在要攒够ppp的经验和qqq的钱,且任意一个时刻只能做一项工作,每项工作进行的时间可以是任意非负实数,问要达到目标最少需要工作多少时间?做法: 本题需要用到凸包。好题。我们把一项工作看...
原创
169阅读
0评论
0点赞
发布博客于 3 年前

【CF622F】The Sum of the k-th Powers-拉格朗日插值

测试地址:The Sum of the k-th Powers题目大意: 求∑i=1nik\sum_{i=1}^ni^k∑i=1n​ik对109+710^9+7109+7取模的值。做法: 本题需要用到拉格朗日插值。容易看出(或者用数学归纳法简单证明),答案f(n)f(n)f(n)是一个关于nnn的最高次为k+1k+1k+1的多项式。问题是,怎么得到这个多项式呢?这时候就要使用拉格朗日插值法。...
原创
302阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3202】项链(SDOI2013)-数论+组合数学综合

测试地址:项链题目大意: 用n(≤1014)n(\le 10^{14})n(≤1014)个珠子串成一个环形项链,每个珠子是正三棱柱,每一面上写一个111 ~ a(≤107)a(\le 10^7)a(≤107)中的数字,当且仅当写的三个数字gcd⁡\gcdgcd为111时,这个珠子是合法的珠子。两个珠子旋转或翻转后相同就看做相同。用nnn个合法的珠子串成一个环形项链,要求相邻两个珠子不同,求本质不...
原创
207阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP4926】倍杀测量者(LGR-053)-二分答案+差分约束+判正环

测试地址:倍杀测量者做法: 本题需要用到二分答案+差分约束+判正环。对于第一种flag,用不等式表示:如果满足xA≥(k−T)xBx_A\ge (k-T)x_BxA​≥(k−T)xB​就不用女装;对于第二种flag,用不等式表示:如果满足xA(k+T)>xBx_A(k+T)> x_BxA​(k+T)>xB​就不用女装。显然我们可以二分TTT(因为显然TTT越大...
原创
150阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ2653】middle-二分答案+主席树

测试地址:middle做法: 本题需要用到二分答案+主席树。神仙题。很久以前Mychael大佬称这题和TJOI那个排序差不多,于是二分答案那一步想得特别顺畅,结果却卡在简单主席树…菜爆,估计退役稳了。首先看到这个题和数的大小有很大关联,想到二分答案,那么现在要解决的问题就是,如何判断最大的中位数和midmidmid的大小关系?我们发现,若存在一个满足题目要求的区间,使得区间中≥mid\ge...
原创
109阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP4927】梦美的线段树(LGR-053)-线段树

测试地址:梦美的线段树做法: 本题需要用到线段树。经过简单的计算,题目所求的是:ans=∑sumi2sum1ans=\frac{\sum sum_i^2}{sum_1}ans=sum1​∑sumi2​​于是我们现在要求的就是∑sumi2\sum sum_i^2∑sumi2​。向上合并非常简单,主要难的是,当一棵子树内每个叶子节点都增加xxx时,新的平方和如何计算。令sonison_is...
原创
121阅读
0评论
0点赞
发布博客于 3 年前

【CF891C】Envy-最小生成树+虚树+并查集

测试地址:Envy题目大意: 给定一个带权无向连通图,每次询问给出kik_iki​条图中的边,问这些边能不能同时处在这个图的一棵最小生成树中。做法: 本题需要用到最小生成树+虚树+并查集。居然没看题解想出来了这道神题,非常开心。首先,判断kkk条边是不是能同时在最小生成树中,实际上只要求出包含这些边的边权和最小的生成树的权值,再和最小生成树比对即可。怎么求呢?首先把kkk条边先连上,形成...
原创
167阅读
0评论
0点赞
发布博客于 3 年前

【CF160D】Edges in MST-最小生成树+并查集

测试地址:Edges in MST题目大意: 给定一个带权无向连通图,因为最小生成树不唯一,于是问每一条边是一定在最小生成树上,还是可能在最小生成树上,还是不可能在最小生成树上。做法: 本题需要用到最小生成树+并查集。这题挺神的。首先肯定需要构造出一棵最小生成树,那么树上的边的答案只有“一定”和“可能”两种,而不在树上的边的答案只有“可能”和“不可能”两种。接下来先讨论非树边的答案。根据最...
原创
291阅读
0评论
1点赞
发布博客于 3 年前

【BZOJ1146】网络管理(CTSC2008)-树状数组+主席树

测试地址:网络管理做法: 本题需要用到树状数组+主席树。经典的带修改树上路径第kkk大问题,不过我太菜了居然忘了有树上主席树这个东西…不带修改的话能用树上主席树做,那么带修改怎么办呢?因为一次修改会影响一棵子树上的所有线段树,所以我们还是把树拍成DFS序,就变成区间修改了。注意到查询的时候只是查单棵线段树,因此可以运用差分的方法,把上述操作变成单点修改,前缀和求和,这个就用树状数组套主席树(...
原创
72阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1188】分裂游戏(HNOI2007)-SG函数

测试地址:分裂游戏做法: 本题需要用到SG函数。我们发现每一个巧克力豆都是相互独立的,所以我们可以把整个游戏看成,若干个单个巧克力豆组成的游戏的和游戏。于是SG函数的状态就很好定义了。再思考,一个巧克力豆会分裂成两个,也就是说,从这个巧克力豆走到的状态,都是两个巧克力豆组成的和游戏,这时候我们就很显然明白SG函数怎么算了。至于计算第一步怎么走,暴力枚举走法,如果走下去之后和游戏的SG函数值变成...
原创
85阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1414】对称的正方形(ZJOI2009)-Manacher+RMQ

测试地址:对称的正方形做法: 本题需要用到Manacher+RMQ。首先,我们想到枚举正方形的对称轴,求对称轴交点为某个点时的最大正方形大小。为了方便,我们模仿Manacher算法,把矩阵用000扩充成一个(2n+1)×(2m+1)(2n+1)\times (2m+1)(2n+1)×(2m+1)的矩阵,这样我们就只用考虑中心点是整数坐标的情况了。我们思考怎么判断一个中心点向外延伸kkk的长度...
原创
282阅读
0评论
0点赞
发布博客于 3 年前

【HDU4507】Seven-数位DP

测试地址:Seven做法: 本题需要用到数位DP。是的,我看这题题目名字实在太长,就自己给取了个名字…首先看它给的条件,如果只求数字个数的话,非常明显是数位DP的形式,只需要设num(i,j,k)num(i,j,k)num(i,j,k)为前iii位中,不卡上界的,数位和对777的余数为jjj,数对777的余数为kkk的数字的个数,很容易就能转移。而要求数字的和较难一点,但我们也能较快地想出转移...
原创
69阅读
0评论
0点赞
发布博客于 3 年前

【CF55D】Beautiful Numbers-数位DP+优化

测试地址:Beautiful Numbers题目大意: 求在区间[L,R][L,R][L,R]中,有多少能整除自身所有非零数位的数。做法: 本题需要用到数位DP+优化。首先这题一看就是数位DP,本题的关键是状态的设计以及优化。我们很快能写出一个状态定义:f(i,j,k,0/1)f(i,j,k,0/1)f(i,j,k,0/1)表示前iii位,所有非零位的LCM是jjj,对jjj的余数是kkk...
原创
123阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3326】数数(SCOI2013)-数位DP

测试地址:数数题目大意: 给定L,RL,RL,R两个10510^5105位内的B(≤105)B(\le 10^5)B(≤105)进制数,L≤RL\le RL≤R,对区间[L,R][L,R][L,R]内的所有数xxx,累加xxx中所有子串表示的数字的和(如123123123,应该累加123+12+23+1+2+3123+12+23+1+2+3123+12+23+1+2+3到答案中,注意不应该包含前...
原创
232阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1124】Mafia(POI2008)-环套树DP

测试地址:Mafia做法: 本题需要用到环套树DP。按照题目构图,很显然是我们很熟悉的环套树森林。接下来我们进行分析,最后活下来一些什么人是合法的呢?观察发现,一个人的目标如果是自己那就必死,而没有被作为目标的人一定存活,还有一个特别重要的性质:一个人iii和他的目标aia_iai​到最后不可能都存活。在满足这些条件的情况下,我们一定可以构造出一个顺序使得最后存活特定的人。于是问题就非常好分析...
原创
114阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3140】消毒(HNOI2013)-二分图匹配

测试地址:消毒做法: 本题需要用到二分图匹配。挺妙的一道题,我反正是没想出来。首先考虑二维的情况,即二维平面中有一些点,覆盖一个x×yx\times yx×y的矩形所需要的代价是min⁡(x,y)\min(x,y)min(x,y),求最小代价。我们发现,直接覆盖一个x×yx\times yx×y的矩形,并不比直接覆盖min⁡(x,y)\min(x,y)min(x,y)条横行或纵列优,因此最优...
原创
102阅读
0评论
0点赞
发布博客于 3 年前

【HDU4869】Turn the pokers-思维

测试地址:Turn the pokers题目大意: 有mmm张牌,一开始正面都朝下,有nnn次操作,每次操作给出一个XiX_iXi​,表示要从这些牌中选出XiX_iXi​张翻面,求所有操作完成后能得到多少种不同的正/反面序列。做法: 本题需要用到思维。因为将牌做任何置换都是合法的,因此只要我们能构造出最后有kkk张正面的情况,就会对答案有CmkC_m^kCmk​的贡献,因此问题就变成求哪些k...
原创
113阅读
0评论
0点赞
发布博客于 3 年前

【HDU4661】Message Passing-思维+树形DP+组合数学

测试地址:Message Passing题目大意: nnn个人,每个人知道一条独一无二的信息,每次可以选择一个人,向与他有关系的一个人传递所有他已经知道的信息,关系网是树状的,目标是让所有人都知道所有的信息,问有多少种传递信息的方案,使得传递的次数最少。做法: 本题需要用到思维+树形DP+组合数学。首先,显然传递次数的下限是2(n−1)2(n-1)2(n−1),那么我们能不能到达这个下限呢?...
原创
136阅读
0评论
0点赞
发布博客于 3 年前

【HDU6038】Function-思维+组合数学

测试地址:Function题目大意: 给出一个关于000到n−1n-1n−1的置换aaa,一个关于000到m−1m-1m−1的置换bbb,求有多少从000到n−1n-1n−1映射到000到m−1m-1m−1的映射fff,满足f(i)=bf(ai)f(i)=b_{f(a_i)}f(i)=bf(ai​)​。做法: 本题需要用到思维+组合数学。根据题目的要求,f(ai)f(a_i)f(ai​)可以...
原创
106阅读
0评论
0点赞
发布博客于 3 年前

【ContestHunter0601】Genius ACM-贪心+倍增+归并排序

测试地址:Genius ACM做法: 本题需要用到贪心+倍增+归并排序。某机房大佬给的我他书上的一道神题…据说还是“基础算法”章节的例题…看来我NOIP退役已经是可以预见的了…首先可以大胆猜想(并小心证明)的是,计算校验值时所选的MMM对数,一定是最大的与最小的配对,次大的与次小的配对…以此类推。那么很明显的,一个区间如果被另一个区间包含,那么被包含的区间的校验值一定更小,这就是区间包含单调...
原创
306阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4974】字符串大师(LYDSY1708)-KMP+构造

测试地址:字符串大师做法: 本题需要用到KMP+构造。看到这种求字符串循环节之类的东西,就立刻想到KMP。联系这题循环节的定义,我们发现,把条件描述中的前缀改成后缀,答案显然也是一样的。于是我们得出一个大胆的结论:前缀iii的最短循环节长度等于i−nextii-next_ii−nexti​,其中nextinext_inexti​正是KMP算法中的nextnextnext数组。如果要严格证明的...
原创
100阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3727】Zadanie(PA2014 Final)-思维

测试地址:Zadanie题目大意: 一棵树,第iii个点有aia_iai​个人,现在求出了bib_ibi​,为所有人走到点iii的总路程,要求还原aia_iai​。做法: 本题需要用到思维。在我们求bib_ibi​的时候,我们可以使用换根法,那么我们能不能用换根法,找到a,ba,ba,b之间的关系呢?在换根法中,先随便选一个点作为根(这个根不是指换根法中的根,而是为了算法方便而求出的根),...
原创
107阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4293】Siano(PA2015)-线段树+二分

测试地址:Siano题目大意: 有nnn片草,第iii片草每天长高aia_iai​米,mmm次操作,每次操作在第ddd天把所有草高于某个数bbb的部分割掉,求每次割下的草的高度和。做法: 本题需要用到线段树+二分。挺神的一道题…注意到每次割草,被割的草都不一定是一个区间,很难处理,因此想到通过某种办法把每次操作的修改变成一个区间。观察发现,在任何时刻,aia_iai​大的草的高度一定不会比...
原创
125阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4297】Rozstaw szyn(PA2015)-贪心+树形DP

测试地址:Rozstaw szyn题目大意: 一棵nnn个节点的树有mmm个叶子节点,每个叶子节点有一个权值,要求给所有非叶子节点赋一个权值,使得树上每相邻两个节点的权值差的绝对值之和最小。做法: 本题需要用到贪心+树形DP。一个想法是,随便选一个非叶子节点为根,然后用某种贪心或者DP求出答案。这首先要要求,当每个子树内都达到最优时,整体的答案就最优。我们来分析一下这个问题。首先,对于儿子...
原创
84阅读
0评论
0点赞
发布博客于 3 年前

【CF610C】Harmony Analysis-分治+构造

测试地址:Harmony Analysis题目大意: 有2k2^k2k个2k2^k2k维向量,这些向量的每一维都是111或−1-1−1,要求构造出一种情况使得,对任意两个向量,它们的内积(∑ai⋅bi\sum a_i\cdot b_i∑ai​⋅bi​)为000。做法: 本题需要用到分治+构造。首先看k=1k=1k=1的情况,显然解是这样的:+1,+1+1,+1+1,+1+1,−1+1,-...
原创
231阅读
0评论
1点赞
发布博客于 3 年前

【HDU5710】Digit-Sum-思维+构造

测试地址:Digit-Sum题目大意: 令S(n)S(n)S(n)为nnn的十进制表示的各个数位之和,要求构造出一个最小正整数满足a⋅S(n)=b⋅S(2n)a\cdot S(n)=b\cdot S(2n)a⋅S(n)=b⋅S(2n)。做法: 本题需要用到思维+构造。我们尝试找出从nnn变成2n2n2n后,数位和的变化。令nnn包含的≥5\ge 5≥5的数位有xxx个,那么变成2n2n2n后...
原创
107阅读
0评论
0点赞
发布博客于 3 年前

【HDU5573】Binary Tree-思维+构造

测试地址:Binary Tree题目大意: 你手里有一个整数,一开始为000,你一开始走入点111,之后从点xxx可以走到点2x2x2x或点2x+12x+12x+1,每走到一个点,必须将手里的整数加上或减去这个点的编号,要求构造出一种方案使得走恰好kkk个点后,手里的整数恰好为n(≤2k)n(\le 2^k)n(≤2k)。做法: 本题需要用到思维+构造。n≤2kn\le 2^kn≤2k是一个...
原创
102阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4538】网络(HNOI2016)-整体二分+树上差分+树状数组

测试地址:网络做法: 本题需要用到整体二分+树上差分+树状数组。各位大佬想的都是用一些树链剖分+线段树套堆这种诡异操作,O(mlog⁡3n)O(m\log^3n)O(mlog3n)卡进去的,然而像我这种常数爆大选手根本不敢写…于是发现还有222个log⁡\loglog的方法,还是挺神的。考虑只有一个询问的时候,二分答案,每次二分一个midmidmid,要知道这个询问的答案是不是大于midmi...
原创
103阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3053】The Closest M Points-KD树

测试地址:The Closest M Points题目大意:kkk维空间里有nnn个点,qqq次询问,每次询问这nnn个点中与某个点的欧式距离前mmm小的是哪些。做法: 本题需要用到KD树。KD树的一道比较复杂的模板题,复杂度我也不懂,好像是随机情况下O(nlog⁡n)O(n\log n)O(nlogn)?总之能过。于是KD树就照常建,在询问的时候,答案用一个堆来做会快一点。里面会涉及到求一...
原创
75阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4320】Homework-分块+并查集

测试地址:Homework 做法:本题需要用到分块+并查集。 看到取模,一般的数据结构肯定做不了,于是考虑对权值序列分块。 首先,当模数不超过n−−√n\sqrt n(nnn为最大数)时,我们显然可以开n−−√n\sqrt n个桶,每次插入暴力更新这些桶,这样答案就可以每次O(1)O(1)O(1)地求出了。 然后,当模数超过n−−√n\sqrt n时,它在nnn之内的倍数不超过n−−√n\...
原创
106阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ2741】L-分块+可持久化trie

测试地址:L 做法:本题需要用到分块+可持久化trie。 我们知道,一个连续异或和实际上就等于两个前缀异或和的异或,因此我们求出前缀异或和,转换成一个新的问题:求区间内两个数异或的最大值。这个东西直接用数据结构做不好做,而且又强制在线不能用莫队,因此考虑相似的分块。 首先对序列分块,然后对于每一块,令mx(i,j)mx(i,j)mx(i,j)表示第i+1i+1i+1块左端点到点jjj区间中最...
原创
100阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4241】历史研究-回滚莫队

测试地址:历史研究 做法:本题需要用到回滚莫队。 看到这道题目,感觉主席树、树套树这种都不能做,于是考虑离线的莫队算法。 然而我们很快发现一个问题:对于题目中要求的信息,由于在插入时,maxmax\max值要么不变,要么变成你目前插入的元素所对应的重要度,所以这个很容易完成。但是删除时就不一定了,你并不知道maxmax\max值此时会怎么变化。这就意味着我们不能用传统的莫队算法解决这一问题,...
原创
93阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4137】火星商店问题(FJOI2015)-线段树分治+可持久化trie

测试地址:火星商店问题 题目大意:有nnn个商店,每个商店都有一个特殊商品,每个人在任何时间都可以买。第一天可能没有进货,有若干次询问,而之后的每天,都有一次进货和若干次询问,每次进货都是某个商店进了某个编号的货,每次询问都是询问在编号为lll到rrr的商店中,在ddd天内进的货的编号异或xxx的最大值。 做法:本题需要用到线段树分治+可持久化trie。 对于特殊商品,直接用可持久化trie...
原创
241阅读
0评论
0点赞
发布博客于 3 年前

【HDU4117】GRE Words-AC自动机+线段树优化DP

测试地址:GRE Words 题目大意:给定一个字符串序列,每个字符串有一个权值。求一个子序列(可以为空),使得序列中前一项总是后一项的子串,并且字符串的权值和最大。 做法:本题需要用到AC自动机+线段树优化DP。 很容易看出一个DP,但我们不能暴力找到可以转移的点,因此我们需要观察能转移到字符串sisis_i的点的性质。 首先对这些串建出AC自动机,我们发现,可以转移到字符串sisis_...
原创
99阅读
0评论
0点赞
发布博客于 3 年前

noi.ac系列NOIP2018模拟赛参赛实录

被教练要求去参加这个比赛,结果被锤爆……难道我OI生涯的最后一年要晚节不保了么…… 题目质量非常不错,思维很广阔,出题人阵容很强大,难度比NOIP稍高,但并没有到很省选的水平,所以还是我太菜了啊…… 比赛网址:noi.ac 注意,这里写的是本人的参赛实录,可能并不包含题目真正的题解!2018.9.8 Day1T1 Candy题目大意:两个数列,每个数列中有nnn个数,要从中取数,...
原创
1528阅读
1评论
2点赞
发布博客于 3 年前

【BZOJ1835】基站选址(ZJOI2010)-DP+线段树优化

测试地址:基站选址 题目大意:有n(≤20000)n(≤20000)n(\le 20000)个村庄,第iii个村庄坐标为didid_i。现在要在村庄中建造不超过k(≤100)k(≤100)k(\le 100)个基站,在村庄iii建造基站的费用是cicic_i,并且如果没有在村庄iii周围sisis_i距离的范围内建造基站的话,就要支付WiWiW_i的补偿费。求最小花费。 做法:本题需要用到DP...
原创
184阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4912】天才黑客(SDOI2017)-最短路+虚树+线段树优化建图

测试地址:天才黑客 做法:本题需要用到最短路+虚树+线段树优化建图。 本人好像使用了本题最经典,但是也最难写,时间复杂度最高,也很丑的做法。但是作为本人接触线段树优化建图这种方法的第一道题,本人还是十分坚强地写出了本人OI生涯中最长的一份代码(长达6.2KB)。 首先简化题意,题目给出一张有向图,每条边上有一个字符串,是一棵给定的trie中能匹配的一个串,一条路径的代价是:每条边的边权之和,...
原创
214阅读
0评论
0点赞
发布博客于 3 年前

【HDU4897】Little Devil I-树链剖分

测试地址:Little Devil I 题目大意:有一棵树,每条边一开始为白色,维护两个操作:将路径上所有的边反色(黑白互换),将所有和路径相邻(只有一个端点在路径上)的边反色,并支持询问一条路径上黑色边的数目。 做法:本题需要用到树链剖分。 首先路径反色很模板,就不说了。关键是路径相邻边反色,看上去很不可做,因此我们考虑等价代换。 注意到,一条边只有一个端点在路径上时,它才会被反色,有零...
原创
76阅读
0评论
0点赞
发布博客于 3 年前

【UOJ#282】长度测量鸡-数学证明

测试地址:长度测量鸡 做法:本题需要用到数学证明。 北大数院扛把子tlk大佬回母校(我校)讲课,给了这一道快乐题,比较有趣,写一下证明。 可以根据打表或者直觉得出一个结论:当n>3n>3n>3时一定无解。要证明这个看上去非常简单的结论,需要用到一些比较有趣的思路。 首先n=1n=1n=1时显然有解,n=2n=2n=2时将木条分为长为1,21,21,2的两段就可以,n=3n=3n...
原创
264阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP3830】随机树(SHOI2012)-DP+概率期望

测试地址:随机树 做法:本题需要用到DP+概率期望。 对于第一问,考虑令f(n)f(n)f(n)为有nnn个叶子节点的树中,叶子平均深度的期望值,我们考虑找到递推的方法。直接推这个不太好推,我们知道叶子平均深度乘上nnn就是叶子深度和,因为期望的线性性,所以f(n)⋅nf(n)⋅nf(n)\cdot n就是叶子深度和的期望值。这个就比较好推了。对于一棵树,原本的叶子深度和为sss,如果展开一个...
原创
151阅读
0评论
0点赞
发布博客于 3 年前

【UOJ#388】配对树(UNR#3)-线段树合并

测试地址:配对树 做法:本题需要用到线段树合并。 这题是NOI2018中间Mychael大佬给的一道神题,现在他已AFO,我也从蒟蒻变成了一个没那么弱的蒟蒻,于是在写这一题的同时,怀念一下和Mychael大佬一起度过的OI时光(虽然只是网上交流2333)。 首先,如果一个区间内点出现了多次,肯定是先自己结合掉2k2k2k次是最优的。那么剩下的一个点集,对于树上的一棵子树,有这样的结论:对于子...
原创
143阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4475】子集选取(JSOI2015)-组合数学

测试地址:子集选取 做法:本题需要用到组合数学。 本题是一个结论题,接下来写一下数学推导。 我们显然可以分开考虑每个元素,最后把方案数乘起来。对于一个元素,它在直角三角形中的存在是要满足一定限制条件的:考虑从直角三角形的左下角引出一条折线,可以向上或向右走,最后折线的左上方就是出现该元素的位置。那么折线的数目就是方案的数目,可以发现折线不管怎么走都是走kkk步,而每一步都可以选择向右或向上,...
原创
202阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4003】城池攻占(JLOI2015)-左偏树

测试地址:城池攻占 做法:本题需要用到左偏树。 如果没有修改操作,题目中的要求很显然可以用树上合并左偏树来在O(nlogn)O(nlog⁡n)O(n\log n)时间内解决。但是有了修改操作我们要怎么办呢? 考虑左偏树的各种操作,它不会像splay一样往上或往下转,而且操作都是自下而上的,因此左偏树有类似线段树的性质,可以在上面像线段树一样处理标记。处理的方法就十分模板了,就不详细说了。这样...
原创
102阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP3600】随机数生成器-概率DP+双指针

测试地址:随机数生成器 做法:本题需要用到概率DP+双指针。 考虑离散概率情况下的期望公式: E[ans]=∑xs=1s⋅P(ans=s)E[ans]=∑s=1xs⋅P(ans=s)E[ans]=\sum_{s=1}^x s\cdot P(ans=s) 也就相当于: E[ans]=∑xs=1P(ans≥s)E[ans]=∑s=1xP(ans≥s)E[ans]=\sum_{s=1}^x P...
原创
550阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ5333】荣誉称号(SDOI2018)-找规律+树形DP

测试地址:荣誉称号 做法:本题需要用到找规律+树形DP。 第一次想出Luogu黑题祭。 首先,考虑题目中条件的形式,如果我们令点iii的父亲为点⌊i2⌋⌊i2⌋\lfloor \frac{i}{2}\rfloor(实际上就是在二进制中右移一位),那么所有点可以拼成一棵二叉树,问题就可以表示成:要使树上所有长为k+1k+1k+1的祖孙链上的aaa值之和对mmm的余数为000,点iii上aaa值...
原创
183阅读
0评论
0点赞
发布博客于 3 年前

【CF966E】May Holidays-分块+虚树

测试地址:May Holidays 题目大意:一个nnn个人的公司,除了111号外每个人都有一个直属上司,uuu为vvv的下属当且仅当uuu的直属上司是vvv或uuu的直属上司是vvv的下属。每个人都有一个承受阈值titit_i,当一个人的下属中有严格大于titit_i个人休假而他没有休假时,他就会不开心。mmm次操作(改动一个人的休假状态),求每次操作后不开心的人数。 做法:本题需要用到分块...
原创
307阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4484】最小表示(JSOI2015)-贪心+拓扑排序+bitset

测试地址:最小表示 做法:本题需要用到贪心+拓扑排序+bitset。 显然,如果一条边对连通性没有影响,那肯定是要删掉的。现在的问题就是如何找到这些边。 我们考虑在反拓扑序上求。考虑一个点的所有出边,对于每个指向的点,如果当前还没有找到从当前点到这个点的路径,那么当前的边就要保留,并用这个点能到达的点的集合更新当前点的集合,这个显然能用bitset做到O(nm32)O(nm32)O(\fra...
原创
107阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ5416】冒泡排序(NOI2018)-组合数学+树状数组

测试地址:冒泡排序 做法:本题需要用到DP+组合数学+树状数组。 一道神题,用到的数学知识并没有难到哪里去,但成功把我这种弱菜区分掉了。 首先,交换次数能达到题目中给的下界的充要条件是,排列中不存在长度≥3≥3\ge 3的下降子序列。因为要达到下界,每次交换都应该要“达到效果”,即两边的元素都往该去的方向移动。而一旦出现长度为333的下降子序列,就一定存在一次交换,使得对一个元素没达到效果,...
原创
186阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ5319】军训列队(JSOI2018)-主席树+二分

测试地址:军训列队 做法:本题需要用到主席树+二分。 首先可以证明,最好的匹配方法是,按照区间内权值顺序从小到大依次匹配[K,K+r−l][K,K+r−l][K,K+r-l]。证明如下: 假设区间内有两个数x<yx<yxi+1i+1i+1和iii,那么: 当x<y≤ix<y≤ixi+1≤x<yi+1≤x<yi+1\le xx≤i<i+1≤yx≤i&...
原创
159阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ5417】你的名字(NOI2018)-后缀自动机+主席树

测试地址:你的名字 做法:本题需要用到后缀自动机+主席树。 首先考虑l=1,r=|S|l=1,r=|S|l=1,r=|S|的情况。考虑TTT的每个前缀的贡献,我们需要找到它最短的没在SSS中出现过,而且没在TTT的前面部分出现过的后缀,这样包含它的所有后缀就都是合法的贡献了。显然这个后缀的长度等同于,在SSS中出现过或者在TTT的前面部分出现过的最长的后缀的长度加111。因此我们分开考虑两种情...
原创
663阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1396】识别子串-后缀自动机+线段树

测试地址:识别子串 做法:本题需要用到后缀自动机+线段树。 很快能有一个想法,就是用后缀自动机求出所有识别子串,然后在线段树上区间更新。可是识别子串的数目可能很多,直接更新会挂,这是不是就意味着不能做呢?别急,先来考虑识别子串这个性质会不会使它的分布更加特殊。 很快我们便观察到了一个事实,包含一个识别子串的所有子串都是识别子串。我们知道子串的集合就等同于所有前缀的所有后缀的集合,根据上面的性...
原创
159阅读
0评论
0点赞
发布博客于 3 年前

【HDU4787】GRE Words Revenge-AC自动机+分块

测试地址:GRE Words Revenge 题目大意:维护以下操作:1.在词典中加入一个单词。2.询问一个字符串SSS中有多少个子串是词典中的单词。强制在线。 做法:本题需要用到AC自动机+分块。 如果离线,我们可以直接把所有涉及的单词先加入到trie中,然后建AC自动机,在运行的时候打标记和匹配即可。 但这里强制在线,我们知道AC自动机本身是不能支持在线插入操作的,所以每次插入后我们需...
原创
125阅读
0评论
0点赞
发布博客于 3 年前

【51Nod1766】树上的最远点对-线段树+树的直径

测试地址:树上的最远点对 做法:本题需要用到线段树+树的直径。 我们直觉上感觉这题的区间询问需要用到线段树,那么我们就要发掘出问题中隐藏的可合并的性质。而看见最远点对又会想到树的直径,那么树的直径这个信息是不是可以快速合并的呢?怎么合并呢?下面我们就夯实理论基础,这样我们就能很简单地解决这一题了。 首先有一个结论:树上任意一个点在树中的最远点是树的直径的某个端点。我们可以用反证法轻易地证明这...
原创
350阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3648】寝室管理-环套树+点分治+树状数组

测试地址:寝室管理 题目大意:给定一棵树或环套树,求图中经过至少kkk个点的路径数。 做法:本题需要用到环套树+点分治+树状数组。 先考虑树上的做法。对于这种树上路径计数的问题,应该能形成一种条件反射了,不能DP马上想到点分治。点分治中,每一次我们考虑过某个点的合法路径数时,先把子树列成一列,对于一棵子树里的所有点,它到根的距离disdisdis和之前子树中的点到根的距离xxx应该满足x+d...
原创
133阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1367】Sequence(Baltic2004)-贪心+左偏树

测试地址:Sequence 做法:本题需要用到贪心+左偏树。 在讲做法之前先说几句无关的话……NOI考完之后内心一片空虚,于是在颓废了约十天之后终于鼓起勇气写代码了,实在是可喜可贺…… 对于这一道题,题目要求的是递增序列,发现不太好求,于是根据要求的值的几何意义,如果我们把原数列做ai=ai−iai=ai−ia_i=a_i-i这样的变换,那么我们求出的不递减序列的最优解和原来的最优解相同。 ...
原创
110阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3235】好方的蛇(AHOI2013)-DP+单调栈+容斥

测试地址:好方的蛇 做法:本题需要用到DP+单调栈+容斥。 首先,容易想到预处理出某个顶点(左上、左下、右上、右下)为(i,j)(i,j)(i,j)的合法矩形数目。怎么预处理呢?以处理右下顶点为(i,j)(i,j)(i,j)的合法矩形数目为例,我们要数的实际上是合法的左上顶点的数目,我们发现这个数目可以这样计算:令up(i,j)up(i,j)up(i,j)为从点(i,j)(i,j)(i,j)向...
原创
187阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4709】柠檬(JSOI2011)-决策单调性优化DP+单调栈

测试地址:柠檬 做法:本题需要用到决策单调性优化DP+单调栈。 首先需要发现一个结论:最优方案中被分成的每一段的头尾贝壳的大小应该是相同的,并且这一段中产生贡献的就是这个大小。因为如果上面条件中有一个不满足,我们把某个端点单独分成一个段就比这个方案更优了。于是我们令f(i)f(i)f(i)为前iii个贝壳能得到的最大答案,有以下状态转移方程: f(i)=max{f(j−1)+sj(sum(i...
原创
282阅读
0评论
0点赞
发布博客于 3 年前

【LuoguP4233】射命丸文的笔记-多项式求逆

测试地址:射命丸文的笔记 做法:本题需要用到多项式求逆。 首先,要求存在哈密顿回路的竞赛图的哈密顿回路期望数量,就是用哈密顿回路的总数除以存在哈密顿回路的竞赛图数量。 要考虑所有竞赛图的哈密顿回路数量之和,反过来考虑对于所有哈密顿回路,出现某回路的图的数量之和。显然对于一个回路,包含它的竞赛图数量是2n(n−3)22n(n−3)22^{\frac{n(n-3)}{2}},而一个哈密顿回路实际...
原创
146阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ3899】仙人掌树的同构-圆方树+树上哈希+DP

测试地址:仙人掌树的同构 题目大意:定义一棵仙人掌树为,每个点最多在一个环中的无向图,且图中的环都是简单环。问有多少种点的置换,使得置换后的图和原图相同。n≤1000n≤1000n\le 1000。 做法:本题需要用到圆方树+树上哈希+DP。 首先显然的是,仙人掌同构就等同于圆方树同构。不过这题的仙人掌定义和一般的仙人掌有些不同:是每个点最多在一个环中,而不是每条边。又因为没有重边,所以没有...
原创
323阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ1336】Alien(Balkan2002)-最小圆覆盖

测试地址:Alien 做法:本题需要用到最小圆覆盖。 我们知道最小圆一定是点集中某三个点的外接圆,因此我们要找到这三个点。 求最小圆覆盖的算法是这样的: 先枚举一个iii,表示现在要求包含前iii个点的最小圆。 对于每一个iii,如果它不在当前求出的最小圆中,则把当前最小圆修改成点iii,然后继续进行下面的操作,否则继续枚举iii。 枚举jjj,表示现在要求包含第iii个点,且包含前j...
原创
212阅读
0评论
0点赞
发布博客于 3 年前

【HDU5299】Circles Game-扫描线+set+树上删边博弈

测试地址:Circles Game 题目大意:给定nnn个圆,圆两两之间只可能有相离或包含两种关系。两个人博弈,每次可以取走一个圆以及被这个圆包含的所有圆,不能取的人输,问先手必胜还是必败。 做法:本题需要用到扫描线+set+树上删边博弈。 两个圆之间只可能相离或包含,那么显然这种包含关系能够构成一座森林的形状。如果再将所有不被任何圆包含的圆与一个空点相连,这就是一棵树了。意识到我们每次取走...
原创
102阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4001】概率论(TJOI2015)-生成函数+卡特兰数+微积分

测试地址:概率论 做法:本题需要用到生成函数+卡特兰数+微积分。 令g(i)g(i)g(i)为iii个节点的不同构的二叉树数目,我们知道这就是卡特兰数。再令f(i)f(i)f(i)为iii个节点的所有不同构的二叉树的叶子节点数总和。答案显然就是f(n)g(n)f(n)g(n)\frac{f(n)}{g(n)}。 首先很快得出fff的递推式: f(1)=1,f(n(n≥2))=2∑n−1i=...
原创
267阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4727】Turysta(POI2017)-构造+链表+SCC

测试地址:Turysta 题目大意:给定一张竞赛图,要求求出从每个点出发的,经过点数最多的一条简单路径,输出方案。 做法:本题需要用到构造+链表+SCC。 首先可以证明一张竞赛图必有一条哈密顿路径(反证法),又可以证明一张强连通的竞赛图必有一条哈密顿回路(这个暂时不知道怎么证,不过看了下面的构造方法差不多也能明白)。我们先来找出原图的哈密顿路径。 竞赛图的任意导出子图一定都是竞赛图,所以我...
原创
112阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4036】按位或(HAOI2015)-Min-Max容斥+FWT

测试地址:按位或 做法:本题需要用到Min-Max容斥+FWT。 因为一直是或,所以一个位置上如果有了111,这个111就会一直有下去,那么问题就变成了,每次选择一个子集,问所有点都被选过的期望次数。所有点都没选过的期望次数,也就相当于这些点中最后一个点被选的期望次数,容易想到Min-Max容斥: E[max{S}]=∑T∈S(−1)|T|+1E[min{T}]E[max{S}]=∑T∈S(...
原创
232阅读
0评论
0点赞
发布博客于 3 年前

【POJ2954】Triangle-Pick定理

测试地址:Triangle 题目大意:求处在一个三顶点都在整点上的三角形严格内部的整点数目。 做法:本题需要用到Pick定理。 Pick定理是一个很有趣的定理,对于任意一个顶点都在整点上的简单多边形,都有: 令SSS为多边形面积,P内P内P_内为多边形严格内部的整点数目,P边P边P_边为多边形边上的整点数目,那么S=P内+P边2−1S=P内+P边2−1S=P_内+\frac{P_边}{2}...
原创
111阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ4754】独特的树叶(JSOI2016)-树同构:树上哈希

测试地址:独特的树叶 做法:本题需要用到树同构:树上哈希。 问题的关键是如何快速判断两棵树同构。要想到一个确定的算法是很难的,因此我们考虑哈希。 考虑这样一种哈希方法:类似树形DP,对于每个点,先递归求解它的儿子的子树,然后把所有儿子按哈希值排序,然后在这个序列末尾加上一个子树大小的数值,然后把这个序列按字符串哈希的方式求出哈希值,这就是当前子树的哈希值。这样我们可以O(nlogn)O(nl...
原创
308阅读
0评论
0点赞
发布博客于 3 年前

【BZOJ2882】工艺-最小表示法

测试地址:工艺 题目大意:求一个字符串字典序最小的循环串,即把字符串的前面某一部分接到后面去的那些串中字典序最小的。 做法:本题需要用到最小表示法。 其实这个最小表示法就是我们要求的串,因此我们需要找到一个算法来计算这个最小表示。 建立两个指针i,ji,ji,j和一个变量kkk,其中i,ji,ji,j表示当前在匹配的两个循环串的开头,kkk表示已经匹配的长度。每次匹配,匹配到两个循环串不同...
原创
92阅读
0评论
0点赞
发布博客于 3 年前

【POJ2118】Firepersons-递推+矩阵乘法

测试地址:Firepersons 题目大意:求解常系数线性递推关系:an=∑ki=1an−ibian=∑i=1kan−ibia_n=\sum_{i=1}^ka_{n-i}b_i的第iii项(aiaia_i),其中a0,...,ak−1a0,...,ak−1a_0,...,a_{k-1}和b1,...,bkb1,...,bkb_1,...,b_k已给出。 做法:本题需要用到递推+矩阵乘法。 这...
原创
121阅读
0评论
0点赞
发布博客于 3 年前