Preface
\(2018\)年的尾巴,不禁感慨自己这一年的蜕变只能用蜕变来形容了。
而且老叶说我们今年没的参加清北冬令营可以参加CCF在广州二中举办的冬令营,只要联赛\(390+\)就应该可以报。
想都不要想啊当然是要去的啦,可以跑到这么远的地方交流一下还可以逃过一月月考(\(2019.1.24\to2019.1.31\))
瞬间感觉有了点实质性的东西刺激一下自己了,而且离\(ZJOI\),真的不远了。。。
List
- Luogu P3704 [SDOI2017]数字表格 大力的套路反演,只不过这里的反演是在指数上的。主要是一个式子要暴力调和级数算所以有点卡常。
- Luogu P2336 [SCOI2012]喵星球上的点名 首先一眼把所有串接在一起跑SA,然后发现所有的询问的字串在SA上一定是一个区间,所以我们二分得出这个区间的端点。然后就是莫队的经典操作了。 sol
- Luogu P3179 [HAOI2015]数组游戏 非常奇妙的博弈论好题。暴力的SG函数乱搞不难想,优化的话
打表找规律(归纳法)发现SG函数是一段一段出现的,而且和\(\frac{n}{i}\)的值有关。所以我们写一个类似于分块的方法求一下即可。复杂度为常数极小的\(O(n)\),卡一卡可以过(话说我手写Hash就T+RE,然后用个vector吸氧快的飞起) - CF1089F. Fractions CJJ在打的这场镜像赛的时候告诉我的一道好题。细加分析
用小凯的疑惑的结论推出只要选出两个\(a,b\)满足\(a|n,b|n,ab=n,\gcd(a,b)=1\)即可构造答案,最后合并起来用扩欧算一下即可。 - Luogu P3168 [CQOI2015]任务查询系统 看到第\(K\)大就是主席树,这道题我们对于不同的时间建主席树然后把每个任务差分地拆成两个就可以做了。
- Luogu P1117 [NOI2016]优秀的拆分 大力后缀数组的好题。考虑先求出形如每个位置开始和结束的形如\(AA\)的串的个数,最后答案就是\(\sum_{i=2}^n front[i]\cdot back[i-1]\)。求的时候枚举\(A\)的长度,然后就是用LCP和LCS计算了,这个大力讨论一下。最后差分一下结合调和级数保证复杂度。
- Luogu P4949 最短距离 难度评级是假的。其实就是一个很水的基环外向树的套路题。我们先把原图拆成一棵树和一条边。然后树上带修改路径就用数剖+树状数组(没必要写常数大的线段树)维护,最后讨论一下是不是走多出的那条边即可。注意一下题目给的是边权,把\(u\to v\)拆成\(u\to i+n\&i+n\to v\)即可化为点权。
- UVA10294 Arif in Dhaka (First Love Part 2) 简单运用一下\(P\acute{o}lya\)定理即可。令\(a=\sum_{i=0}^{n-1}t^{\gcd(i,n)},b=n\cdot t^{\frac{n+1}{2}}(if\ b\ is\ a\ order\ number)/\frac{n}{2}\cdot(t^{\frac{n}{2}}+t^{\frac{n}{2}+1})(otherwise)\),然后第一问就是\(\frac{a}{n}\),第二问\(\frac{a+b}{2n}\)。
- Luogu P4867 Gty的二逼妹子序列&&Luogu P4396 [AHOI2013]作业 离线的区间去重信息维护显然是一个莫队的事情。考虑到答案要查询的是区间,那么用树状数组维护?大可不必,这样多一个\(\log\)太慢了。考虑我们做的修改是远远多于询问的,因此可以用分块来维护和,这样\(O(1)\)修改,\(O(\sqrt n)\)查询,整体复杂度就是\(O(m\sqrt n)\)的了。
- Luogu P2153 [SDOI2009]晨跑 这就是给不重复选取问题套上了一个路径最短的要求,那么可以直接拆点(注意\(1,n\)点可以被多次经过)连边之后跑最小费用最大流。
- UVA12298 Super Poker II 考虑生成函数(在这里或许是母函数),对于任意一种花色,我们构造一个多项式,如果这种花色的这种数字存在就令这个指数系数为\(1\),否则为\(0\)。那么这样显然每一种花色的答案就是这四种花色的卷积后对应指数位置的系数。用\(FFT\)加速之即可。注意清空变量。 sol
- UOJ #192. 【UR #14】最强跳蚤 挺有趣的一道题。考虑完全平方数的所有质因数的指数都是偶数,而偶数的性质让我们想到Xor起来为\(0\)。所以我们在分解质因数的时候给每个不同的质数随机附上一个权值,然后从根开始求异或前缀和最后看有相同的数的对数即可。
- Luogu P3723 [AH2017/HNOI2017]礼物 考虑只对第一个手环加\(m\)(这样\(m\)可以为负,相当于在第二个手环加),最后就是最小化\(\sum_{i=1}^n (x_i+m-y_i)^2\)。展开之后发现需要求的就是\(\sum_{i=1}^n a_ib_i\)的最大值(可以旋转)。把\(a\)倍长再翻转\(b\)上\(FFT\)即可。
- UVA10838 The Pawn Chess 显然的对抗搜索。但是这里直接记忆化的话复杂度太高,因此我们直接用玄学搜索方法——\(alpha-beta\)剪枝。注意扩展状态时枚举的细节。 sol
- Luogu P3980 [NOI2008]志愿者招募 貌似是一个经典线性规划问题。我们考虑用最小费用最大流求解,具体的建模比较套路。当然最好的方法是转为对偶问题直接用单纯形法求解。
- UVA11916 Emoogle Grid 考虑每个位置只可能有\(k-1\)或\(k\)种颜色取值。同时容易发现答案的下界为\(\max_{i=1}^b x_i\),我们发现当\(m>\max_{i=1}^b x_i+1\)时答案每次乘上\((k-1)^n\)所以就是一个对数同余方程求解的问题,用BSGS求即可。注意前面的部分要特判。
- Luogu P3763 [TJOI2017]DNA 貌似正解是\(O(n)\)SAM,然后我写了一发\(O(n\log n)\)的枚举+SA在Luogu上过了
TMDBZOJ机子比Luogu慢五六倍。主要是将暴力比较用跳LCP的方式优化为\(O(3)\)的复杂度。貌似用Hash求LCP在这里比SA快? - UVA1318 Monster Trap 这个大概叫做PSLG问题。对于这题的话我们可以考虑化为图的联通性问题求解。我们将每一条线段稍微延长一点然后判断是否和其它线段规范相交来建边。注意特判线段端点在其它线段上的情况。
- UVA11996 Jewel Magic 十分经典的Splay维护Hash的问题,但是区间操作我只会写FHQ_Treap。但是网上没有这类的代码所以自己调了三四个小时才调出来。具体的话我们额外维护一下正反两个Hash值,反转的时候交换即可。查询的话套一个二分即可。 sol
- LOJ #6065. 「2017 山东一轮集训 Day3」第一题 很久以前法老上课的例题,拿出来做一下。考虑正方形的构成必然是\(2,2,1,1\)或\(3,1,1,1\)的形式。先排个序,前者用\(two\ points\)扫一边,后者用一些计数技巧统计下即可。细节挺多的。
- UVA10652 Board Wrapping 比较基础的计算几何。我们根据重心和边长旋转向量得到四个顶点的坐标。然后容易发现最小的包装就是这些点的凸包,求出来用多边形面积算一下即可。
- 衢州二中省选训练3 终于不是算法专题了。但感觉时间充足了以后从容了很多
第二次时间不够啊,本来\(200+\)可以的啊,最后\(230\)感觉还是不错的。不知道在学校有没有挂掉。- T1:Luogu P3349 [ZJOI2016]小星星 \(O(n^33^n)\)的DP比较好想,直接枚举子集转移即可。但是这里是过不去的,所以我们考虑容斥处理每次DP的子集。这样复杂度就变成\(O(n^32^n)\)需要一定的卡常。
- T2:Luogu P3248 [HNOI2016]树 超级不可做题,真·树套树。大致思路是把每次加进去的子树用根节点代替,这样就变成一个很多大点的树,而每一个大点都是一棵树。分情况大力讨论,再对原树上主席树即可。太难写留着以后填。
- T3:BZOJ 2322 [BeiJing2011]梦想封印 权限题。对于环和链分开单独考虑。环的话显然可以用线性基求出所有本质不同的数。链的话还是扔掉环的线性基里消过之后用set判一下重即可。
- Luogu P3588 [POI2015]PUS 如果是单点限制(\(a_x
)的话相当于从\(x\)向\(y\)连一条长度为\(1\)的又向边。那我们只要最后拓扑排序一下求出最长链即可。但这里相当于是单点向区间连边,果断用虚点+线段树优化建图搞一下就好了。 - Luogu P4473 [国家集训队]飞飞侠 正解貌似是并查集优化建图?ORZ。我只会很乱搞的线段树优化。对于每一行开一棵线段树优化即可。注意边要反向。边数大概是\(n^3\log n\)级别的?
- Luogu P3201 [HNOI2009]梦幻布丁 大水题。用链表(我懒直接写了vector)维护不同的颜色出现的位置,修改时直接启发式合并两个vector即可。注意交换的时候要存储一下每种颜色的真正的值。复杂度\(O(n\log n)\)
- CF 830C Bamboo Partition Div1竟有如此之水的C题。直接暴力化式子再结合除法分块可以做到\(O(n^2\sqrt{max_{a_i}})\),但是在耐心移一下项可以发现\(O(n\sqrt{k+\sum_{i=1}^na_i})\)是完全没问题的。
- Luogu P4556 [Vani有约会]雨天的尾巴 考虑差分,一条\((u,v)\)的路径可以在\(u,v\)处对应权值加\(1\),在\(LCA_{u,v},father_{LCA_{u,v}}\)处减\(1\)。那么最后只需要从下往上处理最大值了。用线段树维护,然后每次合并两颗线段树即可。有点卡内存,所以手写了垃圾回收卡了过去。
- Luogu P3649 [APIO2014]回文串 分开考虑回文和次数。所有本质不同的回文串可以用Manacher求出来,这部分是最多\(n\)个串。然后每个串出现的次数可以在SA的排名数组上用二分+LCP的方法求得,总复杂度\(O(n\log n)\),其实正解是十几行的\(O(n)\)回文树(自动机)。
- HDU 2936 Iceman 十分恶心人的Astar+模拟,主要是那个模拟冰人操作的过程太恶心了。估价函数的话取个切比雪夫距离即可。注意细节问题。
- POJ 3130 How I Mathematician Wonder What You Are! 半平面交第一题。求一个多边形内是否存在一点可以看见整个多边形的内部所有边。其实就是内核了,判断存在的话直接半平面交即可。
- Luogu P3222 [HNOI2012]射箭 答案显然存在单调性,因此二分答案。然后判断的话对于一条线段可以拆成两个不等式,不等式就相当于一个半平面,直接半平面交即可。注意先把所有线段都排序了可以保证复杂度(每次重排就是\(O(n\log^2n)\)了)。十分卡精度。
- Luogu P3773 [CTSC2017]吉夫特 首先我们要知道Lucas定理,然后用它的推论:\(C_n^m\)为奇数需满足\(n\&m=m\)。然后我们可以直接大力DP,转移的话枚举子集即可。复杂度小于\(3^{\log n}\)。
- Luogu P3804 【模板】后缀自动机 终于下定决心花了一晚上学了下SAM,代码比SA更简短,但思维难度还是很大的。板子题的话我们直接建出SAM,然后在parent树上DFS(个人习惯基数排序后枚举转移)得出每个点的出现次数然后算一下即可。
- Luogu P3975 [TJOI2015]弦论 大力SAM(貌似SA也可以,学了SAM就要练一下啦)处理,两种操作的区别仅仅在于每个点的出现次数是否要归\(1\)。最后在自动机上(不是parent树)上DFS下即可)
- Luogu P3346 [ZJOI2015]诸神眷顾的幻想乡 我好像学了假的广义后缀自动机,
其实是我自己写挂了,没有记录树上父亲节点在SAM中的编号。这题的话因为叶子节点个数很少,所以可以直接从每个叶子节点开始把所有的前缀扔到广义SAM里,然后统计本质不同的字串个数就是\(\operatorname{longest}(i)-\operatorname{shortest}(i)+1\) - UVA10256 The Great Divide 求一条直线把所有的两色节点分开?把两色点的凸包先求出来,然后有解的充要条件是两个凸包相离。这个的话就是判下一个凸包的点是否在另一个里面,或者两个凸包的两边是否相交即可。判点是否在多边形内可以用转角法,比射线法少了很多边界问题。 sol
- Luogu P5025 [SNOI2017]炸弹 还是比较simple的题。考虑直接解决这个问题的话可以用Tarjan缩点之后跑记忆化搜索(注意判重边!)。但是直接搞边数太多,考虑每个炸弹能炸到的肯定是区间,所以直接用线段树优化建图即可。注意不要把自己码晕了。
- Luogu P4022 [CTSC2012]熟悉的文章 考虑先建广义SAM(学到了建广义SAM的新姿势,直接把
lst
指向根即可),然后找到询问串的每一个前缀的可以匹配的最长后缀。然后直接二分答案DP判断即可。注意到潜在的单调性,因此可以用单调队列优化到\(O(n\log n)\)。 - Luogu P4461 [CQOI2018]九连环 信仰先写一个爆搜看下,然后发现一个神奇的规律\(ans_i=2\cdot ans_{i-1}+[i\mod 2=1]\),然后用数学分析发现答案就是\(\lfloor\frac{2^{n+1}}{3}\rfloor\),这个的话手动FFT优化高精快速幂?
我选择Python - LA 4728 Squares 求平面最远点对?就是个旋转卡壳的板子,找到所有的对踵点对然后取距离的最大值即可,注意这里可以全开
int
保证精度。 - Luogu P4248 [AHOI2013]差异 本来想练SAM的,但忍不住用SA切掉了。考虑前面的部分就是个常数,等于\(\frac{(n-1)\cdot n\cdot (n+1)}{2}\),然后后面的LCP显然可以直接转化到
rk
数组上。那么我们直接对height
数组用单调栈维护之前最近的小于等于当前height
的位置然后转移即可。 - LA 2218 Triathlon 设第一段的长度为\(x\),第二段长度为\(y\),那么显然第三段长度就是\(S-x-y\)(\(S\)自己定,大点可以避免精度误差),然后对于每一个人要赢可以列一个不等式,和剩下的人判下。。。不就是半平面交吗?大力做就好了,注意很卡精度。
- Luogu P4199 万径人踪灭 考虑将不连续这个限制拆开,我们求出所有回文的然后减去连续的即可。考虑以每个点为中心时左右两边对称的位置个数,这个可以用两次FFT算出来。最后连续的话Manacher水之即可。
- ZJOI2019模拟赛(一)12.15 感觉打挂了(然而莫名Rank1),T1只会暴力(再写个裸的点分治)可以多拿\(20pts\)。T2推论题(orDP套DP),不会写了个\(O(26n^2)\)的Hash被卡常了。T3本来准备写个暴力DFS的,结果写完发现复杂度十分正确,貌似就过了。
然后躺上了HHHOJ的Rank3 - BZOJ 5016: [Snoi2017]一个简单的询问 拆解的莫队例题。首先这种和次数有关的只有询问可以离线的题目肯定是莫队了,但是有四维怎么搞?用类似二维前缀和的思想拆成四个询问分别莫队就好了。
- Luogu P3979 遥远的国度 带换根的树剖裸题。首先按\(1\)为根树剖一下,然后分三种情况考虑。①:\(rt=now\),直接输出全局最小值即可;②:\(now\)不在\(1\to rt\)的路径上,直接在原树上求子树最小值即可;③:\(now\)在\(1\to rt\)的路径上,把\(son_{now}\to rt\)的路径扣下来然后查询剩下的最小值即可。
- Luogu P4688 [Ynoi2016]掉进兔子洞 首先每一次询问的答案相当于\(\sum_{i=1}^3 r_i-l_i+1-3\cdot\sum_{j=1}^{Maxnum} \min(cnt_1,cnt_2,cnt_3)\),只考虑后面。显然可以对颜色取交集那么用bitset维护下就好了。注意这样的话同种颜色的不能直接看做相同,因此离散化的时候不能去重,然后为了防止MLE我们分多次跑即可。
- Luogu P4689 [Ynoi2016]这是我自己的发明 最近很想写ynoi?这道题的话就是BZOJ 5016: [Snoi2017]一个简单的询问和Luogu P3979 遥远的国度的结合并加强数据版。树上跑的话就是在DFS序上拆解区间,然后这样的话因为有了换根就有\(9\)种情况。
- Luogu P4117 [Ynoi2018]五彩斑斓的世界&&CF896E Welcome home, Chtholly 又是ynoi,这题被卡时卡空间了好久,最后交了快3页才卡着过去。这种神奇的操作
加上ynoi的尿性我们可以选择分块大法。但是块内有什么可以同时维护相同的数的数据结构呢?并查集大法表示可以把数全部串起来。那么只剩下修改时要改的数过多的情况了,这个的话一些数减少等同于另一些数增加,分情况考虑即可。 - Luogu P5068 [Ynoi2015]我回来了 ynoi不解释。感觉这题偏水。首先bitset跑不了的,记一个\(f_{i,j}\)表示从\(i\)出发最短路\(\le j\)的点的集合,这个可以直接BFS跑出最短路之后大力递推来。然后询问的话由于无向图,到一个点的距离相当于从这个点出去,因此每次询问把所有的\(f_{x,y}\)或起来最后看下有多少个\(1\)就好了。
- Luogu P4590 [TJOI2018]游园会 DP套DP的板子题,最近模拟赛考的这个姿势来学。考虑两个串已知时我们做LCS时的DP过程,我们发现\(f_i\)和\(f_{i-1}\)之间的差不会超过\(1\),因此可以把差值状压一下,外面在套一层DP即可,顺手判一NOI的限制即可。注意要滚存。
- BZOJ 3277: 串 一眼SA+二分?但仔细一想SAM好像也可以搞。首先把广义后缀自动机建出来,然后沿着parent树向上DFS统计出每个后缀在树上的后缀路径出现的次数和。考虑出现\(k\)次的限制的话,直接在SAM上匹配即可。
- UVA10779 Collectors Problem 感觉是个较水的最大流板子。把人和物品分开来,将\(1\)号人作为原点向每一件它有的物品连容量为物品个数的边。然后其他人的话如果它这个物品的数量大于\(1\)那么由物品向它连边表示可以兑换,容量为个数\(-1\),如果没有那么从物品向它连边表示可以兑换,但只会接受\(1\)个。跑一边最大流就好了。
- Luogu P3934 Nephren Ruq Insania&&Luogu P4118 [Ynoi2016]炸脖龙I 难得不是分块的ynoi?区间修改?小常数的树状数组跑一发,后面那个是什么鬼。联想到某上帝类型的题目,我们用扩展欧拉公式展开来算,发现对一个数一直取\(\phi\)复杂度是\(\log\)的,然后就有理有据的艹过去了?
- Luogu P4070 [SDOI2016]生成魔咒 SAM一眼题不想吐槽。注意这里儿子数组开不下所以套一层map即可。SA貌似结合
height
数组的性质也可以做,不过又难写又慢。 - Luogu P4166 [SCOI2007]最大土地面积 平面面积最大四边形?首先发现答案的点肯定在凸包上,然后想一下如果是求最大三角形面积怎么搞?显然旋转卡壳就好了。然后四边形沿着对角线剖开不就变成两个三角形了么,所以我们枚举定点和对角线然后对两边同时做RC即可。
- Luogu P3181 [HAOI2016]找相同字符 该用SAM做的题我又写SA了。。。考虑先把两个串拼起来,那么显然只要在一个串里查找另一个串的LCP即可。考虑固定某一个,然后相当于要支持所有元素取\(\min\)还要统计贡献?单调栈维护之即可。
- Luogu P4168 [Violet]蒲公英 在线的区间众数?不是数列分块入门九题的第九题么,详细见数列分块入门九题(三):LOJ6283~6285中的第九题。这里重码了一遍加深记忆,注意块大小取\(\sqrt {\frac{n}{\log n}}\)可以达到最优复杂度。
- Luogu P2495 [SDOI2011]消耗战 暴力的树形DP显然是\(O(nm)\)的,发现到每一次询问的点数不会很多,所以可以对它们建出虚树,然后维护下当前链的最小值然后类似的DP即可。建虚树的过程可以用排序+栈+LCA来做,总复杂度是\(O(\sum k\log{\sum k})\)
- Luogu P3293 [SCOI2016]美味 带偏移量的最大\(\operatorname{xor}\)值?考虑从高位到低位贪心判断每一位是否可以取,那么通过\(\operatorname{xor}\)的性质可以转化为询问一个区间内是否有值为一段区间的数。显然上主席树就好了。
- ZJOI2019模拟赛(二)12.22 好久没在OJ上掉分了,一夜回到解放前(Rank3->Rank5)。T2想网络流花了太久,T3基准的暴力也没拿来。直接GG。实际证明题好像都不难,T1Tarjan+DP,T2爆搜(全场无人AC,几乎都爆零?),T3分块+堆,只能说自己菜。
- shadowice1984的练习赛 吸取上次教训终于打了一次Rated赛,结果题目出的这么毒瘤(赛后所有题都黑了)。不过出题人混ACG好评,T4题目背景让我感到了ynoi的味道?最后几乎纯暴力水到Rank15?
- T1:Luogu P5110 块速递推 正解是特征根法解除通项公式然后在二次剩余下找到通式,然后对幂次进行分块打表。由于有欧拉定理的存在使得幂次很小。暴力的做法就相当于给伴随矩阵的幂次分块打个表,有个\(2^3\)的常数,卡一卡可过。
- T2:Luogu P5111 zhtobu3232的线段树 出题人的线段树风格为何如此奇特?考虑就用线段树来维护答案,每个节点维护一下\((ans,pre,suf,exist)\),然后大力讨论下合并的情况即可。注意一些情况的特判,以及动态开点的空间要开足。
- T3:Luogu P5112 FZOUTSY 原凉我作为柚子厨比赛的时候没有看出字符集是\(yuzusoft\)。感觉这题最水了,专治后缀数据结构学傻的人(比如我)。由于\(k\)是固定的所以可以把所有长度为\(k\)的串全部\(hash\)出来,然后变成区间数颜色,莫队即可。(貌似块大小要开\(\frac{m}{\sqrt n}\),不过我\(\sqrt n\)也没被卡)
- T4:Luogu P5113 Sabbat of the witch 魔宴好评,宁宁天下第一!
我也不知道算不算ntr,只想说原世界的男主好可怜)。这题比赛的时候基本上已经写出来了,就是那个栈没有手写上了vector最后全RE。考虑分块,块内维护标记,考虑到每个操作删一次那么可以用栈+\(two\ points\)维护。注意重构的时候每个块内的值域很小,所以可以基数排序,总复杂度是均摊下的\(O(n\sqrt n)\)。 - T5:Luogu P5114 八月脸 出题人题解一句话:边分治,闵可夫斯基和,然后在凸包上二分,我选择死亡。留坑待填。
- T6:P5115 Check,Check,Check one two! 把SAM建出来,然后用边分树来维护?看来边分是个好东西,到时候好好学一下。留坑待填。
- Luogu P3783 [SDOI2017]天才黑客 最近好久没写过这种综合难度极高的题目了。原图中的点显然没什么卵用,我们直接考虑对边进行操作。首先把一条边拆成入点和出点,之间的边权为原来的边权。然后考虑每一次的连边,显然在Trie上两个串的LCP就是两点LCA的深度\(-1\)(要不要\(-1\)看个人写法),然后考虑以LCA为中转点向每棵子树连边。每次连边在DFS序上就变成一段区间。区间连区间?用两棵线段树优化建图即可(貌似可以前后缀建图达到\(O(m)\)的点数)。每个点相连的总点数是\(O(k)\)级别的,因此写一棵虚树即可。最后跑一遍最短路得到答案。\(200+\)码了一个晚上,最后忘清空数组了。。。 sol
- HDU 1693 Eat the Trees 图上的回路问题?观察到\(n,m\)范围极小所以考虑插头DP(今后会把轮廓线DP都称作这个,貌似更常用?),每个插头的状态可以直接用\(0/1\)表示有无。注意判一下不能走的位置不能连进插头。
- Luogu P2606 [ZJOI2010]排列计数 所谓的树位DP(没有打错)?题目求的显然是以\(n\)的点构成的小根堆有多少种方案。那么令\(f_i\)表示\(i\)的点时的方案数,同时没加入一个点时判断一下此时根节点左右儿子的个数。那么因为根节点只能是最小值,因此有转移方程:\(f_i=C_{i-1}^{ltot}\cdot f_{ltot}\cdot f_{rtot}\),注意要写Lucas。
- UVA12161 铁人比赛 Ironman Race in Treeland 成功找了个数据叉掉了题解?静态的树上路径问题就是点分治。这里考虑对于费用和长度二元组\((c,v)\),若\(c
且\(v>v'\)那么显然\((c',v')\)没有任何作用。那么我们每次点分治的时候直接对于不同子树里的二元组排序后\(two\ points\)扫过去即可。复杂度\(O(n\log^2n)\),如果把sort换成基数排序复杂度将下降至\(O(n\log n)\)。 - UVA1411 Ants 考虑一种合法情况,通过三角形的基本性质(两边之和大于第三边)可以发现此时所有节点之间的连线最短。然后就变成二分图完美最小权匹配的问题了,可以写简单的KM算法(我不会),或者直接用MCMF解也是可以的。
- Luogu P2518 [HAOI2010]计数 考虑到位数比这个数小的数相当与把零扔到前面。所以就变成全排列的问题。本来秒出了一个可重集公式的方法,但是这样直接爆了long long。所以考虑用组合数去做,那么一个类似于数位DP的过程算一下即可。注意组合数可以记忆化求解。
- UVA12253 简单加密法 Simple Encryption 半数学半暴力的神仙题。考虑直接DFS放什么数,那么T飞。考虑手玩第二个样例+大胆猜测,我们发现若\(K_1^{n}\equiv dn(\mod 10^{\operatorname{bit}_n+1})\),那么\(K_1^{dn}\equiv dn(\mod 10^{\operatorname{bit}_{dn}})\)。那么我们暴力找出来一个数之后用这个结论直接往前跳即可,实际上这个结论可以用归纳法证明。注意要优化快速乘。 sol
- Luogu P2056 [ZJOI2007]捉迷藏 入坑动态点分治的题。把点分树建出来先,然后考虑每次答案的来源要么是以这个点为根节点的最大值,要么是经过这个根节点的两棵不同子树的最大值和次大值,然后我们维护三个堆即可。注意带删除的堆也可以用STL水过去。具体方式是开一个堆处理删除标记。 sol
- Luogu P5108 仰望半月的夜空 SA大法好.
个人感觉对SA的理解比SAM透彻一些?SAM很多东西只可意会不可言传啊。考虑枚举长度,那么显然可以按字典序的顺序单调枚举。然后就是找出排序后哪些后缀的LCP大于这个长度?在排名数组上二分即可(因为肯定是一个区间),然后对sa
取个\(\min\),用两个RMQ即可。 - Luogu P3345 [ZJOI2015]幻想乡战略游戏 还是毒瘤的动态点分治。先考虑静态的做法,假设现在最优点是\(x\),如果它的子树中一个点\(y\),记子树点权和为\(sum\),那么显然当且仅当\(2\cdot sum_y>sum_x\)时\(y\)比\(x\)优。那么动态之后我们在点分树上从根向下走即可。计算贡献的时候就是很套路的各种差分了,修改直接暴力跳即可。
- waaadreamer的圣诞虐题赛 放假无事开比赛打,就是这两天下雪冷得要死。最后T3,T4都有点想到正解了,无奈码力总是差一点。最后混了个平均水平301pts Rank22。估值竟然进前100了
从今以后开始把社区刷上去- T1:Luogu P5159 WD与矩阵 题目看错三发。这SB题也能?蓝
黄题封顶了吧。比赛的时候脑子跑不动写了个状压+搜索找到了规律然后过掉。后来一想前面\((n-1,m-1)\)的矩阵所有位置可以随便选,最后行列肯定只有唯一合法方案。因此答案就是\(2^{(n-1)\cdot(m-1)}\) - T2:Luogu P5160 WD与循环 这题目也能紫?
蓝题封顶。小于等于不好做,我们考虑枚举\(i\in[0,m]\)求和为\(i\)的方案数再加起来。利用一下组合数的插板法发现答案就是\(C_{n-1+i}^{n-1}\)。最后通过打表找规律或者归纳法得到最后答案其实就是\(C_{n+m}^n\)。 - T3:Luogu P5161 WD与数列从T3开始难度骤升?比赛时为了省力没有写SA,直接写了期望\(O(n^2\log n)\)的Hash,直接差分序列,枚举两个端点之后向后用二分找出长度即可(事实上我为了省力连二分都懒得写,往后找到不满足的然后直接跳掉)。正解是用SA+调和级数,思路类似于Luogu P1117 [NOI2016]优秀的拆分。
- T4:Luogu P5162 WD与积木 刚开始一直在想一些乱七八糟的排列组合的东西(原谅我的计数水平就这么点),后来在意识到这是个第二类斯特林数的经典问题。不过由于第二类斯特林数的定义下不同的层数算作相同,因此这里还要乘上一个阶乘。暴力算的话只能过21pts,考虑每次询问只要算一排的数,那么我们直接用第二类斯特林数的容斥公式:\(S(n,m)=\frac{1}{m!}\sum_{i=0}^m(-1)^kC_m^k(m-k)^n\),这个暴力拆开会发现是个卷积的形式,用NTT求解即可。
- T5:Luogu P5163 WD与地图 超级难写的数据结构+图论+算法题。考虑先将操作倒序变为连边。那么我们对于每一个强连通分量维护一个主席树回答询问即可。那么现在复杂度的瓶颈就在于求出每天边什么时候被缩起来,这个没什么数据结构维护,只有整体二分+带撤销并查集做。留着以后找时间写。
- T1:Luogu P5159 WD与矩阵 题目看错三发。这SB题也能?蓝
- ZJOI2019模拟赛(三)12.31 难度极高的一场比赛,25pts Rank3还涨分了。T1计算几何求三个凸包的\(Minkowski\ Sum\),根本不会。T2想了很久最后怀疑题意理解错了,只有10分,正解好像是概率(期望)乱搞。T3胡乱写了个骗分水了15pts。正解好像是定义向量的\(\gcd\)来做。我选择死亡。
- Luogu P3920 [WC2014]紫荆花之恋 一个假期基本上都在写这题了,陆陆续续地改出了十几个BUG。经典的动态点分治题。考虑直接暴力连点,并假装这棵树是平衡的。然后统计答案将\(dis_{i,j}\le r_i+r_j\)变为\(dis_{j,x}-r_j\le r_i-dis_{i,x}\)(\(x\)为当前的分治中心)。我们用平衡树一定要高速,所以我手写Treap。然后考虑同一子树内的不能重复计算因此再开一棵Treap容斥减一下即可。但是如果树不平衡就没有意义了,所以利用替罪羊树的思想,每次插入是检查是否不平衡,否则重构即可(就是重建成点分树)。\(alpha\)取大点可以最大优化时间(重构的复杂度是\(O(n\log^2n)\)的)
- UOJ #454. 【UER #8】打雪仗 偶然看到的通信+交互题,感觉十分有趣。用这道题结束自己的\(2018\)好了。考虑将原序列分为三段,那么必然有一段里有用的信息不少于一半。我们让\(A\)将这段里的信息全部发过来,之后让\(B\)告诉\(A\)另外两段里自己需要的元素位置,\(A\)把这些位置的全部发过来即可。显然两者发送的字节数都不会超过\(\frac{4}{3}n\),足以通过此题。
Postscript
不仅是12月,同时又是2018的落幕不仅让人有点感慨。
这个月还是和以往一样的浪(好像比以往还。。。)
但是月考也没有炸,反而再逆境中水了个班里的Rank1?
主要语文考得很好,在基础扣了\(6,7\)分的同时还有\(107\)感觉这辈子都没考过这么好
\(107+109+83(Full\ scoce\ is\ 90)+152+64.5\),要不是放弃了社会其实还可以更好
很想好好总结下这一年以及展望一下新的一年但是文笔不够。
所以从贴吧里转来一篇很老的鸡汤文,至少我是挺有感触的。
\(2019\),全新的一年,加油吧!