ZJOI2019一轮停课刷题记录

Preface

菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了

这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主。

偶尔也会打一些比赛找找手感(比如HHHOJ的比赛,Luogu比赛,以及comet OJ上之前的CCPC题)

CF和CC看情况,主要是我真的不太喜欢读英文题的恐怖感觉233

希望这段时间的努力可以让我不跪省选吧


2-26

早上晨跑完了就和杨浩讲了停课的事,不出意外地很轻松就通过了。

然后回班拿了点东西,和初中同学到了个别?,之后可能都见不到了,然后就上路去机房了

由于昨天晚上睡得不算晚,所以强撑着开了一道题:

  • Luogu P2219 [HAOI2007]修筑绿化带 试炼场的最后一题了!首先容易想到把矩形化为前缀和形式求出,那么我们在枚举大的矩形右下角的时候其实就是求一块里的最小值。本来容易想到用二维ST表解决,但是时空限制都不允许我们这么做,那么由于询问的区间长度固定,我们横纵做单调队列即可,细节超多令人绝望(WA了快一页)

然后正想着写什么鬼东西的时候这边机房就要拿来上课了,只好和JZ和ZZK到学习中心去,然后我并没有笔记本,所以只好看了下法老的2015国家队候选队员论文集什么神仙东西

找到一道分块的题,随便胡了个算法竟然踩了网上大部分题解233,不过预处理的时候残了写成了\(O(n^2)\),后来才发现。。。

  • CodeChef FNCS 区间求和套区间求和?我们不虚先来个分块,把函数隔\(\sqrt n\)分个块,对于每一块内预处理出和以及每个数出现的次数,这个可以结合差分做到\(O(n\sqrt n)\),然后询问的时候套路的直接搞就可以\(O(\sqrt n)\)。但是发现询问的时候原序列要特别维护,大部分题解给出了树状数组的方法,但是这样理论多一个\(\log\)不一定跑得动(常数小随便跑233),我们可以把单点修改区间查询用前缀和转化为区间修改单点查询,那么可以再套一个分块做到\(O(\sqrt n)-O(1)\),总复杂度\(O(n\sqrt n)\)

然后开刚LCT题单,准备今天写完特殊题型这一类的:

  • Luogu P3348 [ZJOI2016]大森林 ZJOI神仙题,不过思路还是很好的。我们从微观来看一次修改生长节点的操作,设操作区间\([l,r]\),那么树的形态变化其实只有\(l-1\to l\)\(r\to r+1\),而且是一个类似于子树嫁接的东西。那么一次转移一堆点的状态?可以建虚点啊!这样每次只要断开虚点的边然后接上去就好了。所以思路出来了,我们直接离线之后用LCT维护树的形态即可,注意这里的LCT不能换根所以查询两点间距离需要用树上查分+LCA

然后又去学习中心躺了一下,回来继续刚LCT:

  • Luogu P4338 [ZJOI2018]历史 神仙题,想到一年前的自己考场上看到这题直接自闭,现在竟然要回来刚这种可怜题了233。首先题目简单来说就是已知\(n\)个点的access次数,求一种顺序最大化轻重边切换次数。我们考虑最大化每一个点被切换的次数,容易发现这只和它的不同子树中access的次数有关,可以推导出答案为\(\min(size_x-1,2(size_x-\max_{(x,y)} size_y )\),然后发现可以根据类似轻重剖分的思想把儿子分为轻重儿子,那么每一次修改只有轻边上的答案会改变。考虑到access的过程我们把轻重边用实链剖分来维护,每次access的时候统计答案即可。

发现我的一句话题解越写越长了233,然后为了做最后一题花了一个多小时学了下导数积分一类的姿势,然后去写题:

  • Luogu P4546 [THUWC2017]在美妙的数学王国中畅游 数学分析成分大于代码的一道题。首先题目连泰勒展开的式子都给你了,那么显然是用这个套路搞,这点精度要求展开\(16\)次就够了。那么问题变成求导数了,一次函数的很简单不讲,指数函数的话利用复合函数求导公式以及基本的\((e^x)'=e^x\)也容易得出。主要是三角函数,它的导数和它一样具有周期性,CJJ告诉我这个比如\(\sin x'=-\cos x\)的东西可以推导,但是不会就背了。然后每一次导数都维护一下即可。复杂度\(O(n\log n)\),常数上天233。

然后既然学了下导数之类的东西就去写了下这个一直想做的板子:

  • Luogu P4725 【模板】多项式对数函数 CJJ和ZZK一起教我我才会的真菜,首先\(B(x)=\ln A(x)\)两边同求导得\(B'(x)=\ln'(A(x))A'(x)=\frac{A'(x)}{A(x)}\),然后根据导数不定积分的关系就可以求出\(B(x)\)了,关于怎么给多项式求积分我可以说我是观察出来的吗?然后套上多项式求逆的板子即可。

然后看了下yekehe打麻将(雾),然后对着题解看了好久终于写完了一道咕了好久的雅礼集训

  • LOJ #6040. 「雅礼集训 2017 Day5」矩阵 线性代数那一套理论简直自闭。首先可以发现\(C\)的列向量肯定在\(A\)的列向量的线性空间里,这样当我们确定了矩阵\(A\)\(C\)之后,令\(A\)的秩为\(x\),则合法的\(B\)的数量为\((2^{n-x})^n\)。然后发现对于所有秩相同的矩阵他们的答案相同,所以我们可以先求出秩数于\(C\)相同的矩阵数目,然后除以秩数于\(C\)的秩数相同的矩阵数目。这个可以DP求出,总复杂度\(O(\frac{n^3}{w}+n^2)\)

然后回家肝了下麻将,打到了初心三。由于天气不好老妈还是让我住校,所以麻将只能回家打了233


2-27

下大雨只好坐公交车来机房,先写了一道动态DP的题:

  • Luogu P4428 [BJOI2018]二进制 直接做比较麻烦,我们考虑补集转化,求出所以不合法的方案即可。首先只有\(1\)\(1\)的情况容易发现肯定是有一位凑不到的。然后比较难发现的是出现奇数\(1\)但是\(0\)的个数小于\(2\),这样无法将\(0,1\)配对来构造出解。所以我们线段树用线段树统计即可。修改的时候由于只有单点修改可以直接暴力搞。

然后就开始肝老叶让我们打得CCPC,这里由于题目比较多就选了一些切的动的做了下,Day1一直刚到了28号下午。具体看:CCPC-Wannafly Winter Camp Day1部分题目解析

然后下午补了下博客就开始做题(发现现在经常写不动题):

  • Luogu P4103 [HEOI2014]大工程 虚树的练手题,再一次发现我看的板子的错的?看来以后要找个正确的板子康康了。这题比较明显,我们建出虚树直接大力DP即可,记一下虚树上的每个点子树内所有点到它的距离和,以及最大最小值。然后直接大力维护答案即可。

调到了吃晚饭,回来就写了一道雅礼集训

  • LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 神仙题,SAM+离线+LCT+树状数组(都是CJJ教我的)。首先容易发现前缀的LCP其实就是它们在parent树上的LCA,所以我们要找到其实就是区间内所有点对中LCA的\(len\)最大的那一对。那么先离线了,然后每一次加点的过程其实就是access(类比于LCT求LCA的过程),然后就是在左端点之后的位置找一个最大的值了,由于单点修改直接用树状数组维护最大值即可。

然后爆肝了一道比较有难度的CCPC题,调了好久才出

晚上回寝室睡了,莫名受到大家的欢迎嘲讽233


2-28

很早就到机房了至少比昨天早,然后就见神仙ZZK已经坐在那里打题了

然后我刚坐下点开一道题老叶就叫我们去搞卫生了,但是擦着黑板突然就有了思路回来就过了这题233:

  • Luogu P1712 [NOI2016]区间 要求最大值减最小值最小?我们套路地定下一位然后扫另一位。比如这里可以把区间按长度从小到大排序之后用尺取法选择区间,用线段树(要离散化)维护每一个点被覆盖了多少次,然后如果此时被覆盖次数最多的点已经到了\(m\)就可以弹左端点了。每次更新答案即可。

然后趁着脑子还清醒就去学了一波新算法:仙人掌与圆方树,不过感觉圆方树其实完全可以出到联赛里啊,本身姿势点要求不是很高手动滑稽

然后就是两道入门题了:

  • BZOJ 2125: 最短路 仙人掌上的最短路径问题。首先我想如果时一棵树的情况大家都会做,但是不是树怎么办?建出圆方树啊。我们维护建出树后每个点到根节点的最短距离(经过环的时候讨论一下即可,或者从根开始跑最短路),然后询问的时候如果两个点的LCA是圆点就直接差分,否则倍增上去找到原来环上的点然后分类讨论一下就好了。
  • CF487E Tourists Manchery暑假上课的时候当作圆方树例题讲的一题,现在才会做233。首先我们对无向图建出广义圆方树,然后树上方点的权值可以设为它连接的所有圆点的最小值,这个带删除的堆维护一下就好了。然后链上最小值直接大力轻重剖分+线段树维护即可。不够这样修改一个圆点的值的时候可能被菊花图卡掉,所以我们强制每一个圆点的贡献只传给父亲方点即可,然后询问的时候如果是方点还要算上它的父亲圆点。码量惊人注意不要写挂。

然后中午吃了个饭回来就去做CCPC了,然后下午这边上课就和LTL,ZZK三人开黑打麻将,然后差点就把LTL放飞了(神仙ZZK当然吊打我们)

然后又是圆方树的题233:

  • Luogu P4630 [APIO2018] Duathlon 铁人两项 刚出炉的APIO?看到那个经过同一个点次数的限制马上就把圆方树建出来,然后考虑枚举两个圆点为\(s,f\),那么所有可选择的\(c\)其实就是它们之间的圆点个数。然后我们把方点的权值设为它连接的圆点个数,圆点权值设为\(-1\),这样两点间的圆点个数就是它们之间的点权和了。然后考虑每一个点作为\(c\)对答案的贡献,简单\(O(n)\)树形DP即可。

晚上回来疯狂补博客,然后被CJJ安利了一道思博题,想了一个多小时才出解:

  • LOJ #6501. 「雅礼集训 2018 Day4」Cube 17年的雅礼集训都没做完怎么就来做18年的了233首先手玩\(n,m\le4\)的情况,然后发现\(m=0\)时每次乘\(2\),然后猜测和\(2\)的幂次有关,然后暴力拆出来发现里面\(1,4,6,4,1\),就是个组合数嘛!然后就猜出了\(ans=2^{n-m}\cdot C_n^m\)的结论。具体有一种做法时从\(i\)维推到\(i+1\)的过程,归纳一下其实就得出了那个公式。不过以我的空间想象能力只能从\(0\)维推到\(1\)维233

然后大力开了一道神仙题,这种算法题其实我感觉要多写写:

  • Luogu P3242 [HNOI2015]接水果 刚开始看错题以为盘子是自己挑的然后GG。考虑一条路径被另一条路径包含的情况,转化为DFS序之后发现其实就是一个矩阵覆盖的问题。这个套路地扫描线即可,由于这里只要求一个点被覆盖地次数那么只需要差分+树状数组维护即可。然后如果单组询问怎么做?显然可以二分答案然后判断覆盖次数是否达到\(k\)。那么多组询问的话整体二分就好了,复杂度\(O(n\log^ 2)\)。常数小跑得飞快233

然后调过了回到寝室TMD都熄灯了,摸黑洗脸差评233


3-1

今天早上到机房头就有点晕,可能是今天要经常挂题的前兆吧

不知道干什么就去写了一道Luogu智障智能推荐的题目先,然后又是虚树写挂调了好久:

  • Luogu P4606 [SDOI2018]战略游戏 又是无向图的联通性问题?感觉近几年的题目很喜欢这个考点啊。万能数据结构圆方树套上去啊,发现和那个APIO很像,不能联通就是删除圆点嘛。然后看着这个多次询问有\(\sum\)限制的,直接大力建虚树统计即可,大部分都是套路吧

然后准备学一下咕了好久的MTT,然后各种SB错误一起范最后板子题调了两个多小时才过:

  • Luogu P4245 【模板】任意模数NTT 这种问题主流的做法就两种吧,一种是好写常数又小的拆系数FFT,还有就是容易写挂而且常数巨大的三模数NTT。NTT的做法主要就是取那三个常用的NTT模数然后分别做NTT。然后最后直接合并这些模方程。注意这里要特殊判一下不能直接CRT不然要爆long long

然后开打CCPC的Day2,发现就是神仙题集合,根本不会233

中午和晚上一共花了大概2个小时rush出了比较可做的四题(还有两个是Div2 only),不过有一个神仙的期望题感觉是可以的,不过没有题解就很伤了

具体看CCPC-Wannafly Winter Camp Day2部分题目解析,打的太烂我自己都不想写

然后就被XRYJL安利去做一个看起来很可做的DP题,然后各种奇技淫巧的优化码量直逼数据结构233:

  • BZOJ 2149: 拆迁队 乍一看不是水DP吗,但是细细分析问题好像没有那么简单。第一问很好做,我们可以套路的令\(d_i=a_i-i\)化为LIS树状数组解决(分治的细节太多常数大)。然后考虑第二问,令答案为\(g_i\),首先\(g_i\)只能由\(f_j+1=f_i\)\(j\)转移而来,所以我们可以CDQ分治来计算贡献。然后方程化开发现是个斜率优化的套路,不过这里的\(d_i\)不满足单调性所以splay维护凸包其实直接在单调栈上二分就行了,复杂度上界\(O(n\log^2 n)\),实际根本跑不满。

然后就是回家打麻将,肝到了1点过,上了大概50分左右就睡了,争取明天上雀士。


3-2

由于昨天浪的太晚所以早上起床也晚了,不出意外地迟到了。

然后线下模拟赛,开题后三道题:答案对XXX取模,全是计数题?整个人都不好了233

然后正序开题,先推了下欧拉图的性质,然后发现可能可以写一个\(O(n^n)\)的爆搜打表??

码着码着发现我好像不能根据度数判断图的个数,然后时间已经过了好久了,只好转头写爆搜,跑了好久终于把\(n=8\)跑出来了,喜提10分233

然后看T2,一眼不可做,连爆搜都写不来,只好先弃了

然后看T3,感觉直接暴力\(O(n!\cdot n)\)可能连十分都拿不到,然后只好想点有用的东西。

看到数的个数不超过\(2\)这个限制很容易想到一个DP吧,\(f_{i,j}\)表示第一种数放了\(i\)个,第二种数放了\(j\)个时的答案

转移的时候由于\(\sum\)\(\prod\)可以拆了,所以是正确的,大概30分到手?

然后考虑那个DP其实可以扩展到多个数的情况,其实只要开一个数组记录状态然后DFS转移即可

但是这样直接算就会重复算很多状态,但是我们发现\(50\%\)的数据的状态数都不多,所以可以直接记忆化

但是给数组记忆化?上Hash吗?大常数+\(\log\)不如暴力233

然后其实有一种玄学的Hash方式——自适应Hash,根据数的个数以及大小自动确定Hash方式,这样常数小又没\(\log\)

然而我并不会这种科技,所以orz用这种方法喜提\(70\)分的X_o_r神仙。

最后打得中规中矩吧,主要T1的那个容斥没有切掉还是很可惜的。

然后下午去打了【LGR-056】洛谷3月月赛,然而打得和屎一样就GG了

T1WA了4发才过,我讨厌模拟题.jpg。然后T3又是模拟写不动,T4DP推不来,心态爆炸QAQ

Tips:赛后检查出来好多人T4都PY了,枪毙了一波233

晚上和CXR神仙一起打CCPC,先搞了两题,喜调了一个晚上的杜教筛结果两个人被爆long long

上面的那个具体看CCPC-Wannafly Winter Camp Day3部分题目解析,后面还有好多题都是后面写的


3-3

据说今天早上HHHOJ的比赛ZJOI2019模拟赛(十二)03.03有非传统题,感觉很有趣啊一定要好好玩一玩

然后开题之后先看T1,这好像是个不太好写的传统题,本着快乐CODE的原则我果断跳了这题

然后看T2题答,和APIO2013的出题人思路一样,卡某个程序然后让另一个过掉,只不过问题从图论变成了排序。

第一个点送分,卡计数的话搞一个很大的数就好了。

第二个点要人肉二分一下,搞一堆\(0\)然后弄一个\(1\)加在一个地方让选排刚好T掉就好了

第三个点送分,卡快排的话是个人都知道怎么做,直接让它每次排序的中点都是区间最大/最小值即可

第四个点乱搞一下,定一个不太大的值域然后构造一个降序序列把逆序对个数卡多点就好了

第五个点分治乱搞,让数的波动不大的情况下还能搞出\(n^2\)级别的逆序对即可

第六个点反人类,随机卡快排???弃了弃了

Extra:改了一下午才把Subtask6搞出来,主要是那个随机是假的,在模意义下是有规律的233

然后开T3,刚开始准备写Haffman树暴力压缩的,但是后来一想不对好像劣化的复杂度

就去写玄学Hash,每次只传几位的信息(全靠乱搞),然后喜提\(33pts\)

不过没发现$v$1是不必要的浪费了一定的字符去传,本来应该可以得到\(50+\)的分数的

最后Rank3小小的涨了几分,只要不掉就好了233

下午改早上的题,晚上又是做Comet OJ的题,又艰难地搞掉两题233


3-4

新的一周开始了,然而我还是菜的一批。

今天准备学一个新算法——长链剖分,据说在处理树上深度有关问题上十分好用。

然后就开始做板子题:

  • VijosBS lxhgww的奇思妙想 长链剖分的一个经典应用\(O(n\log n)\)预处理,\(O(1)\)\(k\)级祖先。主要是利用\(x\)\(k\)级祖先\(y\)所在的长链长度一定大于\(k\)这个性质来搞的。由于长链总长度是\(O(n)\)的,所以可以存下一条长链上的所有信息就资瓷了\(O(1)\)查询。但是由于上面没开无限栈然后我的程序就无限RE,白调了好久233

没多少时间了只好先去做一道简单点的长链剖分优化DP题:

  • CF1009F Dominant Indices 比较套路。首先容易想到暴力DP,\(f_{i,j}\)表示以\(i\)为根的子树内到\(i\)距离为\(j\)的点的个数。然后暴力枚举的话发现我们浪费了很多有用的状态。由于这里的信息以深度为下标,所以我们可以长链剖分优化。类似于Dsu on tree每次直接继承重儿子(叫长儿子总感觉怪怪的)的答案,然后暴力合并轻儿子即可。由于每个点只会被作为轻儿子合并一次,所以复杂度是\(O(n)\)的,不过需要用指针优化。

然后刚准备再开一题结果机房里就要上课了,和LTL,ZZK,JZ四人开黑打雀。然后放了LTL一炮被爆踩。

回来后懒得去吃饭了,一遍吃面包一边想题:

  • BZOJ 4543: [POI2014]Hotel加强版 弱化版看P3565 [POI2014]HOT-Hotels。首先想一个暴力的DP,令\(f_{i,j}\)表示在\(i\)的子树内到\(i\)的距离为\(j\)的点的个数,\(g_{i,j}\)表示在\(i\)的子树内两点到它们的LCA距离相同(设距离为\(d\)),并且LCA到\(i\)的距离为\(d-j\)。然后把式子化简一下发现这些东西都和深度有关,直接长链剖分上去就好了。

然后这边又是上课,又是四人打雀,结果我日常被吊打233。同时找了一道据说是长链剖分的题:

  • UOJ #139. 【UER #4】被删除的黑白树 本来想了一个DP,\(f_{i,j}\)表示\(i\)的子树内所有叶子到\(i\)的路径都经过\(j\)个黑点时最多有多少黑点。但是发现这个DP不好优化,所以转头考虑贪心。首先根节点到深度最浅的叶子节点的所有点都是可以全染黑的,并且这个值就是最后每个其它叶子节点到根节点的黑点个数。假设刚开始所有点都是黑的,然后贪心判断一个点是否要被染白即可。

不知道干什么于是就去做了之前学长们讲了好多遍的神题:

  • LOJ #6072. 「2017 山东一轮集训 Day5」苹果树 前置姿势比较多。首先我们可以把问题分解成两个部分:求从所有好苹果中选出\(k\)个让他们的权值和小于\(limit\)的方案数,以及用\(k\)个好苹果能组成的生成树个数。其中第一问直接meet in midldle即可,第二问可以先用矩阵树定理求出至少\(k\)个好苹果的方案数,然后组合数容斥一下就好了。

下午回来了之后本来打算继续写Comet OJ的,然后不禁被一道好题吸引了,然后码+调了一个晚上:

  • Luogu P4292 [WC2010]重建计划 首先答案的形式很容易让人想到分数规划,板子先打着。然后验证答案的时候暴力的DP也是很好想的,直接暴力枚举深度转移即可。深度为下标的DP,那不是直接长链剖分就好了吗?但是这里的信息不是和而是最值,那么不能简单的用指针整体位移。那么就没有办法了么,其实可以类似轻重剖分那样再利用DFS序做文章,我们每次先标号重儿子,这样每一条长链的DFS序就连续了。那么我们就可以用线段树来维护信息了。常数有点大,被同样\(O(n\log^2 n)\)点分治+单调队列吊着打

然后补了补博客就走人了,感觉今天一天基本上就是长链剖分233


3-5

今天感觉状态不是很好啊,早上又起晚了食堂差点都没饭了233说实话我哪天起得早

到了机房准备开始清理一下之前的任务计划,然后就开了一道码量题:

  • Luogu P4069 [SDOI2016]游戏 看错题意ZZ了好久,以为那个加数的操作是在原数的基础上加的。我们考虑简化问题,所以轻重剖分先打着。然后考虑把\((x,y)\)拆成\((x,\operatorname{LCA}_{x,y}),(\operatorname{LCA}_{x,y},y)\),然后暴力拆了式子发现都是以\(dis\)为下标的一次函数。又因为一条重链的\(dis\)显然连续,所以可以建立坐标系用李超线段树来维护,\(O(n\log^3 n)\)但是基本跑不满233

然后早上就有课,只好先去机房打一打雀(一边打一边码上面那题),然后回来过了这题的时候已经过了好久了,只好先找一道水题切切:

  • Luogu P3254 圆桌问题 开始复习图论一块,不知道做什么就做网络流24题吧233。不过这题其实很水,源点和人连,桌子和汇点连,人和桌子之间之间暴力连边然后跑Dinic就完事,纯当复习板子。

中午就开始疯狂补博客,然后基本上把计划补好了,然后时间一到又要上课(打雀)了,就和CXR想了一下CCPC的题目,这次只做了两道Div2 only。然后就把这天的弃掉了233

晚上准备开始写一下数学题,ZZK神仙推荐我先做一道:

  • Luogu P4859 已经没有什么好害怕的了 数学基础比较薄弱就从一些技巧入手。首先你要知道二项式反演(广义容斥)的姿势,然后就可以把刚好转化为至少来做了。然后把多\(k\)个变成糖果能量大的组数方便计算。考虑\(f_{i,j}\)表示前\(i\)个糖中选了\(j\)个获胜的方案数,为了去除重复区间的影响我们只要sort一下然后算出每个数能战胜的区间大小即可。然后剩下的都可以随便选,就达到了至少的要求,然后直接容斥即可。

其实真正的目的是做一道雅礼集训的题,学了这个姿势就可以去写这题了:

  • LOJ #6503. 「雅礼集训 2018 Day4」Magic 神仙题,学到了另一种形式的分治NTT(但是本质完全不同好吧)。先想一个DP,\(f_{i,j}\)表示前\(i\)中颜色分成了\(j\)块的方案数,然后转移的话就是一个组合数错排。考虑到这个转移其实是至少的方案数(因为错排的时候可能会产生新的魔法对),所以可以广义容斥回去。快速计算\(f\)的话其实就是转化成指数型生成函数来加速即可。

感觉今天做题很少啊,技不如人肝拜下风233


3-6

昨天晚上回寝室洗了个澡,所以今天感觉很舒服就是有点感冒233

还是准备先做做数学题,那么既然昨天做了好多容斥那么今天也来点吧:

  • Luogu P3175 [HAOI2015]按位或 比较有趣的题。考虑以每一个子集为状态,全部出现的时间其实就是期望的\(Max\)。那么套路就来了,我们知道\(Min-Max\)容斥在期望意义下仍然成立,那么就是快速计算每一个状态的\(Min\)了。直接搞不好算,我们补集转化一下,求出它的补集的答案然后推回来。然后子集卷积就是\(FMT\)的经典应用了,然后我不会所以就写了\(OR\)\(FWT\)

然后看智障智能推荐里那道待了100多天的题实在不爽,就化了近3个小时rush掉了:

  • Luogu P2178 [NOI2015]品酒大会 首先对于每种相似度都做一遍显然不现实,不过容易发现前面的答案其实包括了后面,所以我们从后往前统计并累加即可。然后在推一下性质发现那个相似的过程其实就是两个后缀的LCP,那么容易联想到height数组的作用。我们对答案的区间进行一个类似于缩点的操作,按height排序后合并两个区间的信息即可,用并查集实现即可。不过要注意两个负数相乘可能是最大值,所以也要额外维护。

还是复习一下图论,做了一道网络流水题:

  • Luogu P2472 [SCOI2007]蜥蜴 ZZ题。容易想到源点向有蜥蜴的格子连边,然后所有能跳到的格子之间连边,能跳出去的格子向汇点连边。然后考虑高度的限制,其实就是限制了一个点被经过的次数,那么其实就是点流量的限制,直接拆点做了即可。

下午有点ZZ想刚一道多项式的神题,然后从看懂题解到码完到调过花了几乎一个下午233:

  • Luogu P4705 玩游戏 这种计数题一看模数就知道是多项式吧。先不管分母把分子用二项式定理展开,发现其实我们只要知道\(\sum_{i=1}^n a_i\)就可以直接卷积求得答案了。然后这个式子其实就是等比数列求和的形式,但是不能快速求就很难办了。没关系,请出万能的生成函数,但是这个\(\sum\)不是很好求啊。没事我们可以用多项式ln把它变成\(\prod\)的形式,然后再求导变回来即可。里面就可以用分治NTT做了,总体复杂度\(O(n\log^2 n)\),有点卡常。

接着转移一想既然已经学了\(Min-Max\)容斥的那一套理论了不如再深入一步吧,然后就练了下\(kth-Min-Max\)容斥:

  • Luogu P4707 重返现世 出现\(k\)个元素的期望时间,还是不好算我们求出\(Min\)之后容斥过去。然后考虑DP解决这个问题。我们设\(f_{i,j,k}\)表示容斥式子中\(k\)的取值,当前是第\(i\)种原料,\(\sum p=j\)的时候容斥系数的值。那么DP的时候就是一个类似背包的转移,但是集合大小和\(k\)的取值变了该怎么办呢。考虑到组合数\(C_n^m=C_{n-1}^m+C_{n-1}^{m-1}\)的性质,下标加\(1\)其实可以拆成两边来算!然后剩下的就是一个巧妙的边界赋值问题了,总之很神仙。

晚上回来继续写数学题,先开一道雅礼集训水题:

  • LOJ #6513. 「雅礼集训 2018 Day10」足球大战 签到题不解释。由于两队进球事件相互独立,那么我们可以直接枚举主队客队进了多少球,容易得到:\(ans=\sum_{i=1}^n C_n^i\cdotp^i(1-p)^{n-i}\sum_{j=0}^{n-1} C_n^j\cdot q^j(1-q)^{n-j}\),然后注意下时空限制,预处理阶乘逆元然后两边一起算即可。注意特判\(p=0/1\)的情况!

然后还是套路地做容斥题:

  • BZOJ 4487: [Jsoi2015]染色问题 高维容斥的应用,其实就是对每一维容斥之后累计的结果。但是暴力搞其实是\(O(nmc)\)的,虽然能过但是很卡。我们可以考虑把一个式子用二项式定理逆着回去就可以做到\(O(nc\log m)\)

和CXR神仙爆肝一道神仙组合容斥题,最后只能啧啧赞叹解法之妙了:

  • Luogu P3266 [JLOI2015]骗我呢 和神仙的题目名一样,解法真的在骗我。首先从挖掘性质到暴力DP的那几步都是可以理解的。然后把DP抽象到平面直角坐标系内然后又是翻折又是容斥的我真的服了。感觉说不太清楚,自己看某神仙的题解。

感觉今天就是被数学题狂虐的一天,我还是太菜了。


3-7

呃,,,今天不知道先写点什么了,那就不写了吧233

早上到机房先做了一道很久之前就想做的题:

  • LOJ #2541. 「PKUWC2018」猎人杀 挺有趣的一道题。首先发现猎人死去之后重算概率的话情况会十分复杂,于是我们考虑转化问题,当一个猎人死去后仍然可以选择它只不过不算要重选。可以证明这样的概率不变!然后我们容斥,考虑有多少个猎人在\(1\)之后死,这是个无限等比数列,但是由于底数小于\(1\)所以它是收敛的,我们化一下式子发现容斥系数就是个背包转移,那么用分治NTT优化即可。

然后脑抽了准备写点大的,然后就没事开了一道神仙题早上9点开始写到中午快1点才调出来

  • Luogu P4220 [WC2018]通道 好久没写这种工业化题了。三棵树上的问题我们就写三棵树来解决。首先对于第一棵树,容易想到用边分治来统计答案,把子树分成两部分。然后由于我们不可能在第二棵树上遍历所有的点,没错虚树又是要码的。然后我们套路的枚举LCA,把这个挂在第三棵的对应点位置上,然后就在第三棵树上动态维护直径就好了,大力DP转移。复杂度\(O(n\log^2 n)\),当然如果你边分治后离线用松式基排来排序的话是一只\(\log\)的。

之后莫名很困,然后小睡了一下就开始和CXR神仙一起刚CCPC的Day4,发现这一场很水,大量分类讨论?

一天狂写了7题,准备明天再做一题的说,具体看:CCPC-Wannafly Winter Camp Day4部分题目解析

最后到了晚上去做了一道模拟退火的SB题,XJB调了调参就过了233:

  • Luogu P2210 Haywire 显然这种东西既不好算数据范围也不大,那么我们直接大力退火,求出每一头奶牛对应位置是什么,每次退火交换两个数即可。

3-8

祝团长节日快乐233,今天感觉有不太清醒,感觉会疯狂挂题的说。。。

然后先做一道前两天智推给我的题目:

  • Luogu P4233 射命丸文的笔记 这种东西我们只要分别求出分子分母就可以算了吧。考虑竞赛图哈密顿回路的总个数是\((n-1)!\cdot 2^{C_n^2-n}\),我们只要求出所有强连通的竞赛图个数即可。这个的话先大力容斥DP,然后发现式子就是个指数型生成函数,再推一下发现一波多项式求逆即可解决。

然后写一道雅礼集训,比较思博的一道题,然后因为各种细节问题GG了好久:

  • LOJ #6042. 「雅礼集训 2017 Day7」跳蚤王国的宰相 首先我们发现对于每一个点,我们都只需要尽量少地割去它的儿子,所以贪心地想肯定是从大到小割。但是直接搞肯定要GG,我们考虑重心的性质,求出重心之后分类讨论一下每个点是割去自己的子树还是在祖先处被割掉即可(类似于换根操作)。

然后去刷了下往年国集的水题,学了下同余最短路一类的姿势,做了两道水题:

  • Luogu P2371 [国家集训队]墨墨的等式&&Luogu P3403 跳楼机 这种同余方程类的问题其实都可以用同余最短路解,我们对于一个系数通常取最小的的所有模意义下的值都建立一个点,然后一次加法转移其实就是连边的过程。为了让最后的取值范围更宽泛于是用最短路来跑。对于这种图我们容易发现死去的SPFA跑的非常快233

下午发现Luogu上多了一道好玩的题答,就和CXR神仙一起玩了一个下午(13:00到17:00):

  • Luogu P5246 [集训队互测2016] 消失的源代码 我们发现这个题目和WC的未来程序有几分相似但是有有所不同。那个题是给了源代码,而这题给的是可执行文件,所以更多的考察的是乱搞能力。这个可以具体看

晚上日常打CCPC,还是Day4的场,用爬山水过一题(正解高斯消元),然后做了一道国集的题:

  • Luogu P1646 [国家集训队]happiness 很神的一题,这问题看起来NPC啊(我做网络流题第一直觉就是NPC)。建图的方法是考虑网络中的意义,我们可以构造一个类似于蝴蝶变换(莫名扯上FFT)的图,容易发现每一种选择方法就是图中的一条割。随后利用最大流最小割定理就可以做了。话说我的Dinic和CZR神仙加了同样的优化但为什么就是慢\(10\)倍QAQ

晚上听说明天要去EZ报到了,收到一个很要好的小学同学的信息,说他也考进了。

真的为他高兴吧,能以这样的方式重见。从明天开始就要从懒散颓废的状态里振作起来,文化课什么的肯定是要好好学了233


3-9

今天老叶说白天还要去考试,然后还是很早起来去机房了。

首先看题,T1貌似是神仙数学题,T2一眼多项式,T3它说是NPC,那我就相信它是NPC吧脑抽警告

然后先刚T1,写了个\(O(p^4)\)的暴力想找点规律,然后无果放弃。

然后想到利用欧拉定理将底数于指数一起降维的方法,但是我太弱了写了一个多小时还是没出来只好放弃。

然后就去策T3,真以为是NPC我就把退火的板子写好了,然后开始想扩展。

T2猜一下大概是把系数插值回去然后多项式开根?看起来很神啊多项式理论盲区

然后。。。就没有然后了,我们就去下面开会,听一堆老师狂吹EZ(不过是有资本这么说),搞得我都想认真学习了233

下午上课,两节数学自闭警告,果然老师认为我们都是竞赛水平的人然后上来就讲一元二次不等式(这TM是最基础的?),然后就是高次以及分式的不等式,大概听懂了大半吧,不过感觉还是找不到之前学习的感觉。

晚上本来是打算来机房的,然后因为不可抗力所以就没有来了,看着除了我们年级外的所有人都全天听课去机房打题了我就难受233

时间太多貌似开始养成了预习复习的良好习惯?


3-10

今天还是要上课,但是不晨跑还是很资瓷的。

然后就是大全套一遍了,物理老师很diao啊,上课超有趣:

改编不是乱编,戏说不是胡说。我ZGJB说的

然后标题就是《物理学中的哲学与人文情怀》(团长就很兴奋了)

还有人数生物老师上课说了几个“对吧“,总之还是很有趣的。

下午和团长和ZLX以及ff他们去打了下球,太久没有运动感觉自己像个**

然后回去洗了个澡,大致了解了那个热水器的工作原理233

晚上终于可以去机房了,时间紧迫快速写了一道题:

  • HDU4676 Sum Of Gcd 把传统的数论题和其它算法完美结合的一道题。首先我们考虑每个数的约数只有\(\log\)个,所以我们可以大力讨论每个约数对答案的贡献。那么就要涉及到一个系数的问题?这个容斥系数怎么求,我们考虑莫比乌斯反演,最后推导出它其实就是\(\phi\)。那么维护区间的答案的话直接套个莫队上去就好了。貌似可以惰性操作做到\(O(n\sqrt n)\),不过暴力的\(O(n\sqrt n\log n)\)也是可以过的。

3-11

今天早上他们模拟赛,我当然又是没有参加233

晚上到机房就看见CXR神仙切了一题,然后我也去写了下:

  • Luogu P2471 [SCOI2007]降雨量 比较蠢的一题。首先我们发现按着\(false\to maybe\to true\)的顺序判就可以省去好多的特判。然后判断年份的时候显然可以用离散化+lower_bound来找,最小值的话直接ST表即可。

然后去玩了一道很有趣的题答(其实本质还是用传统题的做法):

  • Luogu P4459 [BJOI2018]双人猜数游戏 首先你要理解这个神仙猜数的过程,其实就是判断对方的分解方式是否唯一。那么可以用\(f_{i,j,k}\)表示说了\(i\)次不知道,其中两个数为\((j,k)\)是否可行。然后暴力按照两个人的分解方式做即可。

然后思考了很久的一道DS题,但是想不动就写了询问分块乱搞,然后一直被卡时。改了块大小还是T一两个点233


3-12

今天植树节海星,白天和班里的人和一堆外国人去种树种树五分钟,讲话两小时

下午马上回了机房开始调块大小最后终于卡过了(\(167\)玄学!):

  • Luogu P4458 [BJOI2018]链上二次求和 考虑到我们静态直接维护前缀和几颗完成\(O(1)\)询问,那么我们差分重构可以把复杂度做到\(O(n^2)\)。考虑降低复杂度,那么我们惰性维护一个栈,这样隔一段时间再暴力维护一下前缀和。那么多出来的询问就暴力计算贡献。打表出贡献矩阵之后发现是个中心对称形式,那么直接拆了然后大力化式子即可。不过这部分常数极大,需要结合数据玄学调参。

然后老叶和我们初三的要参加省选的人说了,从明天开始恢复听课

虽然挺为我的文化课担心,但是这初中的宝贵机会还是不要放弃吧

然后准备开始学一下一类网络流姿势,从最简单的开始:

  • LOJ #115. 无源汇有上下界可行流 这个又称上下界循环流吧,我们考虑先把每条边的上界流满,那么剩下的只要在增量网络上增广即可。但是这样不一定能使流量平衡,所以我们建超级源汇强制平衡即可。

然后写了一道稍微需要点应用的题,但是分类讨论写的欲仙欲死:

  • POJ 2396 Budget 其实比较simple的一题。首先我们将矩阵拆成行点与列点。然后建两个虚拟点\(s,t\)(主意这里并不是源汇点的意思),分别连上\([sum_i,sum_i]\)的边。然后对于每个点求出这个点的取值范围,直接在对应的点之间连\([l,r]\)(上下界)的边即可

然后做了一道雅礼思博题,所以本质其实是爆搜?:

  • LOJ #6043. 「雅礼集训 2017 Day7」蛐蛐国的修墙方案 爆搜括号序列可以得到\(80\)分的好成绩。然后我们考虑排列的性质,容易证明最后\(i\to p_i\)的边连起来一定是若干个环的形式。那么直接搜是\(2^\frac{n}{2}\)的。但是发现长度为\(2\)的括号序列其实左括号一定要在前面,所以直接做了剩下的复杂度就是\(2^\frac{n}{4}\)

明天就要开始打比赛了,我仿佛已经预见到了我要被CXR吊打的事实


3-13

早上起晚了,而且莫名很困,感觉要GG

到了机房发现要\(9:00\)开考,那么就先去水一道题目:

  • Luogu P4815 [CCO 2014]狼人游戏 SB题,直接树形DP即可。\(f_{i,j,k,0/1}\)表示第\(i\)个点的子树内前\(j\)个点有\(k\)个狼人,第\(i\)个点是否为狼人的方案数。转移的时候直接树形背包即可,最后由于可能是一个森林,再做背包合并答案即可。

然后由于时间还有剩就去学了那个网络流的第二种形式:

  • LOJ #116. 有源汇有上下界最大流 和上面的循环流其实很像,但是可以用类似的方法搞,我们把汇点与源点连\(INF\)的边,但是这样跑出的不一定是最大的。所以我们要在原来网络的基础上继续增广,再从原来的源点向原来的汇点跑最大流即可。

然后就开始比赛了,首先一遍看下来发现题目政治气息很强?

正序开题,T1想了半个小时就推出一半了,就是建出关于\(d\)同余系然后找区间,用ST表维护最大最小值来判断。

但是由于我没有发现这个式子没有单调性,写了二分找区间,自己拍了一会就Hack掉了

感觉那个式子可以移项然后主席树维护,但是已经写了好久了,所以把暴力分特判了就YY了一个新算法——退火二分

原理其实很简单,就是二分的时候若满足条件直接向最优的那边跳,否则概率选择方向,最后喜提\(90pts\)

然后吃了饭回来头很晕,写不动题就开始乱搞,T2本来写了类冒泡排序做法,但是很快就把自己Hask了

但是没时间认真个Hash了,所以展现了独有的乱搞能力——正反乱搞,最后喜提\(33pts\)(T2 Rank2的分数)

看一眼T3——不会。仔细分析,\(n=1\)——puts("0")!最后喜提\(10pts\)

最后\(90+33+10=133\)莫名Rank1,看来今天是乱搞大赛?

下午不是很想改题,就写了些作业水了水,晚上改了后两题,然后去做了一道题:

  • BZOJ 5311: 贞鱼 比较经典的DP优化题,也算是总结了很多的技巧了吧。首先暴力\(O(n^2k)\)的DP很好想,然后容易看出这个DP有决策单调性,用单调队列+二分做到\(O(n\log n\cdot k)\),但是辣鸡BZOJ带不动啊?没事,我们在外面套一层WQS二分即可做到\(O(n\log n\log k)\),轻松通过。

3-14

今天貌似又是一堆节日,但是还是改变不了我被吊打的事实233

早上先做了有源汇有上下界最大流的例题:

  • ZOJ3229 Shoot the Bullet 首先容易想到将天数与人分开建点,然后从源点向每天连\([0,d_i]\)的边,然后与对应的人之间连对应范围的边。最后从每个人向汇点连\([g_i,INF]\)的边即可。直接跑有源汇有上下界最大流即可。

然后就开始比赛了(今天比昨天早了半小时),题目看起来还算正常,一眼看去计数DS还有不知道什么东西都齐了。

然后乱序开题,先看T2,瞎YY了1h的随机乱搞但是无果,但是之后突然有了思路

直接把数排序之后(值域很小用vector即可),用bitset维护所有大于等于某个数的位置

那么每次验证其实就是一个or的过程,直接乱搞即可,复杂度\(O(\frac{n^3}{32})\),有点虚

然后先没写看了T1,想了一发第二类斯特林数NTT(MTT)发现很不可做

后来发现其实不难就是大力枚举长度与结尾位置大力组合计数即可,然后用二项式定理优化式子就可以\(O(n)\)算了

有了T1的\(100pts\)打底写T2就很轻松了,5min写完了bitset然后拍了下没什么问题

但是一测极限数据——\(2.5s\)!这不是要被卡的和暴力一样了。

尝试了一下循环展开一类的科技发现并没有什么用,所以就准备开始手写bitset

不过由于寒假的时候刚写过所以比较快的就调出来了,优化了好几个细节之后一测\(0.8s\)

感觉稳得飞起,就先去吃饭了,回来后发现我前面调试的时候把循环的register都删了,加上去之后\(0.6s\),看来是卡不了了

然后拍着去写T3了,直观地认为这是个二分图完美匹配,由于是区间建边所以可以用霍尔定理

YY了一下正解应该是用线段树维护式子,但是时间只有30min了,只好来一发暴力

枚举+二分增量,然后DFS之后贪心地用上面的东西即可,复杂度\(O(n^2\log^2n)\),应该没有卡常风险

最后所幸没有挂题,\(100+100+20=220\)又莫名Rank1了233

T3正解和想的差不多,如果前两题话的时间少一点就好了(大力ORZ CXR 0.5hAC前两题)

然而今天T3听懂了算法但不想写,感觉\(O(n\log^2n)\)肯定过不去,就尝试看懂度教的一个\(\log\)的做法,最后无果而终

然后下午到晚上疯狂补了一波博客,学了下prufer序列相关的树的计数类问题:

  • BZOJ 4766: 文艺计算姬 如果你会了prufer序列相关的姿势就是SB题了。考虑这个完全二分图的prufer序列长度为\(n+m-2\),且最后的一条边一定连接了两个不同集合里的点。那么接下来向还原剩下的图一定有\(m-1\)\(A\)集合出去的边,同理也有\(n-1\)\(B\)集合出去的边。所以最后答案就是\(n^{m-1}\cdot m^{n-1}\)

然后就用这个性质水了一道雅礼集训,感觉这个结论可以出好多题啊:

  • LOJ #6044. 「雅礼集训 2017 Day8」共 一个很naive的想法就rush过去了233。首先由于根节点确定,深度为\(1\)为奇数,那么只要在剩下的\(n-1\)个点里取\(k-1\)个点为奇数点即可,就是组合数。然后剩下的点其实就被分成了奇数与偶数,那么它们之间连边其实就是完全二分图,直接用上面的结论即可。

然后又去水了一道一眼题:

  • Luogu P2290 [HNOI2004]树的计数 首先把这棵树转化为prufer序列,那么显然度数为\(d_i\)的点最后会出现\(d_i-1\)次。总长度是\(n-2\),最后用可重全排列算一下其实就是\(\frac{n!}{\prod_{i=1}^n p_i-1}\)。C++直接分解质因数可能会挂,所以我选择Python!不过注意有很多情况要特判。

3-15

今天早上模拟赛很爆炸,不想讲QAQ最后都没交

爆肝了4.5h的T2最后无果而终我以后再也不刚计算几何了,写到最后我都开始怀疑叉积怎么判左右了

由于周五马上要回家了,所以就只改了T1,然后被卡常到\(80\)就不想写了

下午回家打了打雀,结果脑抽无役副露不断,为了立直疯狂点炮,掉了好多分233

想着明天既有模拟赛又有ynoi2019模拟赛而且手机也坏了,所以挺早就睡了


3-16

早上很早到了机房,希望不要出现昨天一样的惨剧的说

然后先看了一遍题,发现T1是个算法题,T2应该是计数,T3一眼字符串/数据结构

想了一下T2的DP无果之后就去先玩了T1,发现只要二分答案贪心验证即可

不过细节比较多,写了写拍了拍没什么问题的说,两只\(\log\)跑的也很快(其实可以一个\(\log\)的)

然后写T2的容斥+DP,推了好久的式子最后发现从一个DP推到了另一个DP然后还是不会

此时已经浪费了好久,没办法只好手速写了个爆搜然后对小数据打了个表出来

此时还有0.5h,手速翻到T3,看着部分分感觉大家应该普遍\(20\)(真准!),然后码了个Hash最后5min的时候终于过了样例。

最后也没挂题,\(100+27+20=147\),在CJJ没有改T1的情况下和一堆人并列Rank1QAQ

然后也先没改题目了,就马上投入了ynoi的怀抱,从下午2:00一直打到了晚上10:30终于按计划写完了前两题的高分暴力,\(80+60\)排在Rank4(没有过题的人就和我这样了233)

具体看Ynoi2019模拟赛游玩过程,不过感觉时间还是不够(两天早上都有模拟赛),最后掉到了Rank6

晚上还是打雀,但今天手气不错,先是我清一色副露的情况下上家杠了两次给我开了4张宝牌最后累计到32000,然后又有一把四暗刻听牌了(可以和对家两对中对上了最后流局了)

考虑明天去买个手机?不然实在是难受去ZJOI的时候路上就开不了车了


3-17

今天早上又是OJ上的模拟赛,然后点进去看到那个东方气息浓郁的题目名就知道是杜教的题了233

然后乱序开题,发现T2是ZJOI2015的原题,然而还是不会做,只好先打了个费用流拿个\(10\)

再看到T3,发现\(k\le2\)和一个经典套路很像,但是很可惜没有继续想了,只好先打了随机覆盖得了\(14\)

然后回头看T1,发现也许大概可以退火一波。。。后来弃掉了写个爆搜吧

然后发现爆搜跑的莫名很快233,但是有几个样例WA掉了

ZZ的我查了好久才发现路是可以回头走的,那岂不是要凉了

后来情急之下只好又YY了一个新算法——自控制上界搜索,名字听起来很吊,其实就是给搜索加一个回退的层数

然后一发过了所有的样例?以为自己A掉了233。后来一想时间好像不是很卡就开大了上界

然后最后TLE飞了,还是被CXR的更加神仙的搜索吊着打。。。最后Rank4滚粗了,掉了\(8\)分233

下午还真去买手机了,由于钱都得自己出所以只买了个两千左右的华为,不过比起以前的机子不知道高到哪里去了

Luogu上买了lxl的ynoi讲题,结果因为去班里填入团一类的东西没赶上直播

晚上看着回看发现T2其实已经想到正解了,就是没有和暴力结合一下233

之后听着歌突然就没声音了,然后发现电脑的声卡驱动貌似坏了,看来我得去重装系统了

晚上一直再写一道ODT+树状数组+线段树的狗题,最后调了好久总算是过了:

  • Luogu P5251 [LnOI2019]第二代图灵机 感觉是个不错的数据结构题。首先我们发现颜色与数字没有太大关系,所以可以分开维护。然后颜色的区间赋值和随机操作是个人都知道是ODT。区间和的话用常数小的树状数组维护下就好了。但是发现\(4\)操作的时候直接搞可能会忽略掉单独的数字,所以再用线段树查下区间最大值就好了。

然后补了下博客就走了,老叶说明天休息,那么要乘机多写点题了233


3-18

又是诡异的prufer序列计数题,要写高精我选择python

  • Luogu P2624 [HNOI2008]明明的烦恼 首先没有度数限制的话就很裸了,然后考虑无限制的点,显然它们可以在prufer序列中放在任意位置,然后放的方案就很好算了。

然后是一道假黑题代码1行

  • Luogu P3978 [TJOI2015]概率论 首先暴力推式子或者打表发现若令\(f_i\)\(i\)个点的二叉树个数,\(g_i\)\(i\)给点的二叉树叶节点总数,那么有\(g_i=if_{i-1}\),证明的话直接考虑删去一个叶节点的情况即可。然后对于\(f_i\)很容易看出那就是个Catalan数,直接用通项公式代进去化简得到最后答案就是\(\frac{n(n+1)}{4n-2}\)

之后去写一道线段树维护DP的题:

  • Luogu P2605 [ZJOI2010]基站选址 暴力\(O(n^2k)\)的DP相信是个人都会写,然后容易看出DP方程中\(k\)的一维可以省去(类似背包)。再继续做的话我们需要先找出每一个基站可以被覆盖的区间,然后从左向右移动端点,如果超过了这个区间的范围那么可以在线段树上把\([1,L-1]\)加上贡献,最后转移的话直接线段树上查最小值即可。

然后怒开一道雅礼集训

  • LOJ #6046. 「雅礼集训 2017 Day8」爷 ORZ CXR集训队爷一眼秒了这题的树套树解法(我也不知道是不是对的233)首先把子树问题化到DFS序上,然后这题就变成很裸的区间修改区间第\(k\)了。以我的树套树水平显然是写不出的,那么考虑大力分块做,但是这样根号还带两个\(\log\),肯定跑不动。我们发现其实值域是很小的,所以可以暴力开前缀和维护,当区间极差超过设定值时新开一块。然后定期重构,复杂度是一言难尽的玄学233

结果刚写完这种码量大的数据结构乱搞题CXR神仙又告诉了我一道神奇的题:

  • Luogu P4175 [CTSC2008]网络管理 树上带修改路径第\(k\)大?看起来很神仙啊,转化成路径的话我就不会了啊。不对还有树上莫队!但是有修改怎么搞?树上带修莫队!不过直接做即使你在端点移动的时候用常数极小的树状数组维护的话也会T飞(没写过,复杂度炸了),所以我们可以用分块来资瓷\(O(1)-O(\sqrt n)\)的操作,最后轻松通过。(据说还有\(4\)\(\log\)的做法233)

爆调了好久,然后和CJJ,CXR去做了一道很久以前就想做的神题:

  • Luogu P4383 [八省联考2018]林克卡特树lct 这个问题的弱化版其实去年联赛前就做过,树形DP直径做法都是\(O(nk)\)的。这里的话直径显然不好优化了,那么可以考虑优化DP做法。通过一番推导瞎猜我们发现这个DP有凸单调性,所以可以WQS二分解决!

然后就发现自己伪AC了\(100\)黑(算上小号的)233

然后剩下的时间不多了,就去写了一道LOJ的数学题:

  • LOJ #6261. 一个人的高三楼 求\(k\)次前缀和的问题,首先大力观察(或者数学推导一下)就会发现其实原来的位置\(i\)对第\(k\)\(j\)的位置的贡献就对应着平面直角坐标系内\((1,i)\to(k,j)\)的方案数。然后我们发现这个贡献于原数组的卷积其实就是答案。大力NTT即可。

3-19~3-22

emmm,其实这个菜鸡已经好久没写博客了,连17号的都是22号补的,所以很多东西都记不清了233

这几天早上都是模拟赛,不过比起之前的NOI模拟现在的ZJOI模拟难度更大

老叶也搬了一次ZJOI2016R2的题给我们做,结果大森林被我写挂了233

印象中每次比赛都不算太好也不算太差吧,而且总是有各种ZZ错误(强制在线写挂忘了乘系数没开long long

希望到时候能不犯这些问题吧,简单记一下这几天做的题吧233(都在做乱搞题感觉ZJOI不可能考到的说):

  • Luogu P2839 [国家集训队]middle CLJ出的神题?中位数问题我们出了用堆(平衡树)来维护其实还有二分的方法,二分答案后根据大小情况置为\(0/1\)即可判断。维护最大值的化可以考虑记区间总和,经过区间左(右)端点最大前缀和,用主席树维护即可。
  • Luogu P3215 [HNOI2011]括号修复 / [JSOI2011]括号序列 ODT爆踩标算系列(到Luogu上开提交就会发现Rank1lxl,Rank2CXR,Rank3我都是写ODT的)。前几个操作都是板子,主要就是求答案的时候贪心一下就好了,左括号总往前面放就好了,注意判左括号多了的情况。
  • BZOJ 4237: 稻草人 坐标系内数点问题,那么容易想到CDQ分治。我们考虑按照纵坐标分治,然后考虑下面的点对上面点的贡献。若下面的点存在\((x',y')(x'>x,y'>y)\)的情况,显然\((x,y)\)不会再产生贡献,上面的类似。所以用单调栈维护横坐标单调,然后每次在栈里二分找一下就好了。
  • LOJ #6047. 「雅礼集训 2017 Day10」决斗 升级版的田径赛马???容易发现(用反证法可以得出必然存在一个位置,使得这个位置上的精灵不会溢出到下一个地方。那么我们在这里断开环,用set贪心维护即可。
  • LOJ #6048. 「雅礼集训 2017 Day10」数列 如果只是求最大值的话很简单,我们只要开两个树状数组分别维护放在前面和后面的情况。那么方案数其实也类似,先在树状数组上维护下能排列出的总方案,然后剩下的要么放前面或后面,肯定是\(2\)的次幂。
  • LOJ #6049. 「雅礼集训 2017 Day10」拍苍蝇 计算几何题?我只是想写发大暴力。预处理出苍蝇拍能打到的点集,然后枚举打的一个偏移量看看是否合法即可。可以用bitset压一下复杂度。然后就过了?爆踩标算扫描线+FFT
  • Luogu P5266 僕たちはひとつの光 终于把上次ynoi的题改了233,发现考试时写的东西其实个这个正解没什么区别了(就是一样的好伐)。具体看Ynoi2019模拟赛游玩过程。

然后就是一些喜闻乐见的乱搞题吧,这次是交互专场(据说省选可能会考交互?):

  • UOJ #153. 【UR #10】世界线 有趣的交互,和CXR想了好久最后只出了一个\(40\)的做法(其实\(60\)的也出了,不过没写了)。正解是用一个三角矩阵来搞,比较神仙(交互一言难尽啊233)
  • UOJ #26. 【IOI2014】Game ZZ题,显然对于一条边我们要在最后的时候再让它联通。那么带权并查集维护?大可不必,我们可以用度数来解决,每次强制把边从度数加在编号大的点上,然后直接判就好了。
  • UOJ #52. 【UR #4】元旦激光炮 经典交互题233?我们可以通过二分答案+对三个数组分别二分得到\(60\)分的好成绩。但是如果我们把三个数组都看作无限长,那么可以直接类三分(每次缩小)出答案。这样刚好可以通过。
  • UOJ #286. 同构判定鸡 思路新颖的交互证明题。强行写了\(77\)分rush过前5个点后就不会了。其实这个东西叫做强正则图,有一篇博客讲的十分详细,最后了抄了两个图过了最后一个点。

Postscript

漫长的停课(这应该是我最长的一篇博客了吧,暑假集训的不知道有没有这个长)终于结束了,省选真的竟在眼前了。

感觉这段时间自己的水平又有些进步吧,主要是比赛时的策略变好了些吧,能切的题基本都切了而且拍过都比较稳,不会的题也把暴力分拿稳了

接下来就是放宽心态,认真迎战吧!

转载于:https://www.cnblogs.com/cjjsb/p/10443805.html

你可能感兴趣的:(数据结构与算法,python,人工智能)