省选前的考试记录

日拱一卒功不唐捐
什么沙雕玩意儿

2018.12.24
T1 如果对 \(A\) 数组求出来高度递减的单调栈的话,会发现只有单调栈里的元素是有用的。因为如果有 \(A[i]<A[j] \And i<j\),那电梯就可以在带 \(j\) 上楼的时候顺便把 \(i\) 带上并不会影响结果。所以第一步先求出来单调栈。
列出 \(DP\)\(f[i]=\min\left\{\max(f[j],T[i])+A[j+1]\right\}\) 。打表发现 \(f\) 数组是单调不降的,所以可以把式子中间的 \(\max(f[j],T[i])\) 拆成两部分,前面一部分是 \(f[j]\),后面一部分是 \(T[i]\)。然后对这两部分分别取 \(min\) 即可。
暴力复杂度 \(O(n^2)\),线段树优化 \(DP\) 复杂度 \(O(n\log n)\)

T2 一个显然的 \(DP\) 状态是 \(f[i][j]\) 表示决策完左部点的前 \(i\) 个,最后一个匹配的右部点小于等于 \(j\),形成的最大匹配。
转移就是对于 \(l[i]\le p\le r[i]\)\(f[i][p]=f[i-1][p-1]+1\),然后再对所有的 \(j\) 取个前缀最大值即可。 可以发现如果第一维固定那这个数组的值是单调不降的。
第一维可以滚动数组优化掉,第二维可以拿平衡树维护 \(DP\) 值。具体点就是来了一个区间 \([l_i,r_i]\),那我们把 \([l_i,r_i]\) 这段区间 \(+1\),然后删掉 \(r_i\) 位置的元素,再在 \(l_i\) 位置插入一个新的元素,它的 \(DP\) 值应该是 \([1,l_i-1]\)\(DP\) 值的 \(\max\)
对于这个做法我们并不能举出反例所以这个做法就是正确的 废tm话 总时间复杂度 \(O(n\log n)\)

T3 这谁能想出来啊...日常怀疑人生
直接上做法 离线+扫描线。
如果当前扫描到了 \(r\),那我们需要维护前面有哪些左端点 \(l\) 满足 \([l,r]\) 是一个值域连续的区间。维护的方法就很神仙了。
建一棵线段树,支持查询区间最大值以及最大值出现的位置,如果出现多次则记录最靠右的位置。每个点的初值是下标。设 \(pos[i]\) 表示点 \(i\) 在给出的排列中出现的位置。在扫描过程中这样写:

if(a[i]>1 and pos[a[i]-1]<i) modify(1,1,n,1,pos[a[i]-1],1);
if(a[i]<n and pos[a[i]+1]<i) modify(1,1,n,1,pos[a[i]+1],1);

结论:如果 \(val[l]=r\) 那么 \([l,r]\) 是一段值域连续的区间。

证明:如果 \(val[l]=r\) 那么说明 \(l\) 这个位置被加了 \(r-l\) 次。也就是说在 \([l,r]\) 这个区间内,存在 \(r-l\) 个权值连续的数对,感性理解一下发现这和 \([l,r]\) 是一段值域连续的区间是等价的。
这样就可以动态维护哪些区间是值域连续的区间了。对于一个询问 \([ql,qr]\),我们在 \(qr\) 时将这个询问放进以左端点为第一关键字的大根堆里,在线段树上查询是否存在 \(i\in[ql,qr]\And val[i]=r\) 。如果存在那就说明找到了一个合法的区间,否则根据单调性应该 \(break\) 掉表示如果左端点更小的话就更没有符合的区间了,这时应该让当前扫到的右端点 \(+1\) 然后继续判断。
时间复杂度 \(O(n\log n)\)

2018.12.25

T1 啊woc最烦这种tm刷颜色还带覆盖的题了。xjb贪心就行了woc是真不愿意写这种恶心题的题解告辞。

T2 首先设 \(f[i]\) 表示从 \(i\)\(n\) 的期望步数,\(deg[i]\) 为 点 \(i\) 的度数。那么有 \(f[n]=0\)\(f[1]\) 即为答案。转移方程就是

\[f[x]=\frac{m+\sum_{x\rightarrow y}min(f[x],f[y])}{deg[x]} \]

题目里的最优决策在这里就可以体现出来了,具体是只选择 \(f[y]<f[x]\) 的那些 \(y\) 来对 \(x\) 进行转移。为什么是对的可以证明 \(f[x]\)\(f[y]\) 更新前后的值是 \(f'[x]<f[x]\) 的(\(f[y]<f[x]\))。

所以我们就可以开心的跑 \(dij\) 了。每次选取 \(f\) 最小的节点去更新其它节点,这样就可以保证当前取到的 \(f\) 一定比要去更新的 \(f\) 更小,更新的时候动态记录每个点的 \(deg\) ,直接更新就吼了。

T3 其实可以暴力分块艹过去的
对于 \(\le \sqrt n\) 的那些 \(k\) 暴力求出答案,因为只有 \(\sqrt n\) 个所以这部分复杂度为 \(O(n\sqrt n\log n)\)
对于 \(\ge \sqrt n\) 的那些 \(k\) 它们的答案一定小于 \(\sqrt n\) (感性理解一下并不会证),所以这部分就可以枚举最后的答案 \(x\) ,然后求出最少有多少个关键点时最远距离 \(\le x\)。最后取个前缀 \(min\) 九星了。这部分的复杂度是 \(O(n\sqrt n)\) 的。
同时我们还需要一点卡常技巧。比如说在 \(check\) 函数里加个记忆化会跑的飞快(\(check\) 函数就是求最远距离 \(\le x\) 的时候最少要放几个关键点),同时第二部分枚举的答案要是 \(min(\frac n{block},ans[block])\)。一定记得和 \(ans[block]\) 取个 \(min\) 。因为如果放多于 \(block\) 个关键点答案一定会比 \(ans[block]\) 变得更小。加上这两个优化就可以 \(1500ms\) 通过本题了。嗷对了还有一个忘了说了就是递归 \(dfs\) 的话 太!慢!了!所以我们要把这棵树的后序遍历 \(dfs\) 序存下来,然后每次 \(O(n)\) 的扫一遍。这样比递归快到不知道哪里去了。

2018.12.26

明天终于不考试了耶

T1 随便哈希乱搞就行了

T2 可以拿单调栈维护每个小球领先的时间段,然后双指针扫就行了。把 double 开成了 int 少了25pts凎哦。

T3 考场上的思路只是单纯的三进制状压质因子...然而会有bug就是放一个6再放一个6是合法的...所以状态要额外记一些东西。再额外开15位状压,存每两个质数对能不能选。实现比较有意思,可以拿map存状态,然后每次找map的首迭代器,然后把它删掉。原因是每次转移必然是从较小的数转变为较大的数,所以用map而不用队列存下来就可以保证每个节点不会重复入队。把三进制换成四进制比较好写。还要注意的就是如果先放个2再放个3那就不能放6了,这种情况要考虑到就没啥了。

2018.12.28

三道水题...

T1 随便分块就行了

T2 就是一个AC自动机但是字符集太大所以可持久化数组搞一下

T3 SG函数再记录一个'如果想输是否一定能输',然后分类讨论即可。

不知道考试的时候在干点啥

2018.12.30

T1 挺妙的吧...显然每次要取集合中最大的元素,同时每次只会新加进来一个数。如果这个数大于当前集合中最大的元素那就取了它,否则就取集合中的那个元素,然后暴力找当前集合中最大的元素。这个暴力找具有单调性所以复杂度 \(O(NK)\)。但是卡常就很过分了。

T2 首先一个性质就是选中链的两个端点一定是一个为 \(maxn\) 一个为 \(minn\),第二个性质是一条链不是单增就是单减。这两个性质都可以反证法证出来。然后常规树形DP就行了。

T3 先咕着。

woc我竟然咕了9天了 药丸药丸

2019.01.02

T1 并没有去写...说一下大概思路吧

就是答案最多在 \(9n\log n\) 范围内,所以考虑状态中加上答案。

\(f(c,x)\) 表示一个 \(\max y\) ,使得 \([x,y]\) 的答案不超过 \(c\)

考虑转移,假如 \([x,y]\) 选了 \(i\),那么就要求 \(f(c-a_i,x)\ge i-1,f(c-a_i,i+1)\ge y\)

先咕着

T2 设 \(f(i)\) 表示长度为 \(i\) 的没有回文后缀的字符串个数。考虑往末尾添加一个元素,长度从 \(i\) 变为 \(i+1\),有 \(s\) 种填法,但是可能形成一些回文后缀,长度一定是 \(i+1\),所以递推式就是 \(f(i)=s\cdot f(i-1)-f(\frac i2)\)

T3 傻逼斯特林数

2019.01.07

T1 观察到答案一定在 \(\log \text{值域}\) 范围内。把给定序列的生成函数搞出来,枚举答案,然后FWT起来就行了。

T2 毒瘤容斥题

容斥,枚举哪些格子强制有车

然后再容斥,枚举哪条对角线放车

T3 什么垃圾min25筛咕掉 抵制日货从我做起

2019.01.09

三道乱搞题

T1 把9000种地图都搞出来然后从头开始问,问不了几个就都排除了。

T2 构造题啊...先咕着

T3 有一万种方法过这题啊...谁能证明一下我的方法的充分性啊...

2019.01.10

T1 70分暴力就是把所有环塞进线性基里,然后求出有多少个本质不同的每个点到 \(1\) 的距离。然后这些本质不同的距离乘2^{线性基大小}就是答案。本质不同指的是放进线性基中最后被识别出来是不一样的。

然后满分做法就是套路离线,考虑加边的种类。

假如当前边的两个端点都不在1号点所在联通块,那么不管它。

否则,如果两个端点都在1所在联通块,此时就加了一条非树边,我们在线性基中插入它对应的环,如果插入成功,这种情况最多只会发生logW次,此时就暴力把所有树链重新跑一遍。

否则,两个端点一个在1所在联通块,一个不在,这时就dfs一下新的联通块来得到新的联通块带来的树边和非树边,然后插入线性基即可。

T2 一个很常见但是我又没有见过的性质就是 如果一个多项式是k次多项式,那么它的 k+1 或更高阶差分始终为0,也就是说这个多项式的每一项都为0.

假如当前有了两个多项式 \(a,b\),如何判断是否存在这个多项式 \(P\) 呢?我们记 \(a\) 数组的 \(k\) 阶差分为 \(\Delta^k a\)。不难发现,\(\Delta^{m+1}P_i=\Delta^{m+1}a_i-\Delta^{m+1}b_i\)

因为 \(P\)\(m\) 次多项式,所以它的 \(m+1\) 阶差分肯定为 \(0\) 。问题就转化成了求出 \(a\)\(b\)\(m+1\) 阶差分,然后判断它们是否相等就好了。

怎么求一个多项式的 \(k\) 阶差分呢?公式就是 \(\Delta^k A_i=\sum\limits_{j=0}^k (-1)^j\cdot C_k^j\cdot A_{i-j}\)\(NTT\) 即可。

那怎么解决 \(B\) 串的循环同构呢?倍长一遍接在后面就好了。

整理一下思路:把 \(B\) 倍长,求出倍长后数组和 \(A\) 数组的 \(m+1\) 阶差分,然后做字符串匹配就行了。

一个小细节需要注意就是如果原串 \(A\) 和原串 \(B\) 的匹配位置是 \(A\)\([l_1,r_1]\)\(B\)\([l_2,r_2]\),那在 \(k\) 阶差分后的数组上匹配的就是 \(\Delta^kA\)\([l_1+k,r_1]\)\(\Delta^k B\)\([l_2+k,r_2]\)

T3 简化题意就是找出 \(k\) 条不相交且边权和最大的链,每次找直径然后取反即可。

2019.01.11

T1 傻逼贪心

T2 之前做过一道这题的弱化版 然后把那题的思路拿过来改了改就过了

T3 线段树维护凸包... 还是第一次写 这种动态添加元素的有个套路就是,如果线段树上的一个节点对答案有完整贡献(也就是被询问区间完整包含),那这个区间的元素一定全部添加完毕,也就是说区间右端点的元素一定已经添加。所以每次插入第 \(i\) 个元素的时候只需要将线段树上所有右端点等于 \(i\) 的区间求出来凸包就好了。然后求凸包emmm,终于彻底会用叉积了,\(cross(a,b)>0\) 表示的是 \(a\) 能逆时针转到 \(b\)。判断 (top-1)->(top) 和 (top-1)->(i) 的叉积,如果维护的是上凸包且叉积为正那就要弹栈,下凸包且叉积为负同样需要弹栈。

2019.01.12

心态爆炸导致弃疗

T1 傻逼树套树+启发式分裂 但是过不了。观察到启发式分裂+树套树是三个log的,如果换成启发式分裂+平衡树就是两个log就能过了。强行凑复杂度没啥意思啊....

T2 咕咕咕咕

T3 啊这题 首先求出来递推式:\(f[i]=f[i-1]+\sum\limits_{j=1}^{i-1} f[j]\cdot f[i-j]\) 边界条件是:\(f[0]=0,f[1]=1\)

\(f\) 的生成函数搞出来得到 \(F=xF+F^2+x\) ,求根公式一下变成 \(F=\frac{1-x-\sqrt{x^2-6x+1}}{2x}\)

留坑

好的现在彻底搞懂了。

就是它的分母没有常数项不能求逆怎么办

我们可以先设一个 \(G=xF\),这样先求出来 \(G\),然后把 \(G\) 整体平移一位就得到 \(F\) 了。

2019.01.14

T1 如果没有 \(a\) 的限制的话就是一个斜率优化,但是增加了一维限制,考虑 \(CDQ\) 分治降维。注意先递归左边再算中间再递归右边,这样就不能归并了,复杂度 \(O(n\log^2n)\) ,不是很跑的过去。考虑预处理这个东西,即 \(CDQ\) 过程中每层的每个元素都是什么,这个直接归并就好了。复杂度 \(O(n\log n)\)

T2 T3 咕咕咕咕咕

哇不知不觉我已经咕了一个多月了

中间好像有一个重要的考试啊

没错就是WC

唔考的很烂很烂

考试的时候什么状态呢?

第一次经历这种全国高端玩家在一个体育场里同台竞技,感觉确实和平时考试的感觉不一样吧

一个十分清晰的感受就是考试的时候时间过得太快太快了,而且由于没有特殊训练过五个小时的比赛,对时间没什么概念

开场之后扫了一眼题,看看部分分,目标分数大概是 70+60+50,这样大概就能au了?

开T1 只会opt=0,y=1和n<=5的点,感觉药丸,想着无论如何也要想出来opt=1的,这样T1就有70+了,但是越想越想不出来,然后心态渐渐失衡

滚去想T2 感觉前三个点应该很快能写完,但第二个子任务一直在想着怎么在程序里用两个数字递推斐波那契,忘记了打表,然后就凉凉了。第二次,第二次我忘记打表这个工具了。第三个子任务其实就是一个最短路,但是考场上犯sb觉得十分繁琐,感觉需要多路增广,然后就没有再去想。

T3 最后两个小时的时候去想T3 看第一个子任务的分值十分诱人,想着就是暴力分类讨论我也要写出来第一个点,然后就开始漫长的分类讨论,大概40分钟后码完了130+行的分类讨论,此时心情已经十分烦躁了。但是还是要感谢考场上的自己没有放弃,而是用下发的交互库继续去调了20分钟代码,不然的话连cu有没有都还是个问题。其实再仔细想想的话前两个点都可以直接归并排序做,第三个点二分也就没什么大问题。但是没想到就是没想到吧。

下来之后反思自己,还是对时间的掌控不够好。而且心态极其容易受到干扰,一道题做不出来导致整场比赛发挥不理想这也不是第一次了,上次这样的大型比赛是noip2018的D2。

结局没有达到自己的预期,但是意外的在这个弱省不错?而且写了的分基本都拿到了只有T1挂了4分。稀里糊涂拿了个Ag吧但是并没有满意,还得继续努力啊。

↑好了上面就是WC的游记

2019.02.22

T1 最开始看T1没什么思路,但是刚了半天T2又反过头来看之后思路一下子清晰了。就是按照期望DP的套路那样做就行,没什么好说的,因为没有特判1掉了10pts

T2 其实如果把想到的都写上可以拿75分啊。。。然而因为T3暴力写挂的原因一直在调T3导致心态爆爆爆爆爆炸。其实就是一个折半,然后map随便记录一下就好了。

T3 推一推式子发现A,B,F都可以O(1)算,然后树套树随便搞就行了。然而掉了10pts不知道是wa了还是T了。垃圾暴力毁我青春。

操犯傻逼了并不是T3暴力写错了

树套树写GG了

大概就是因为是单点修改区间查,所以在修改的时候,在第一棵线段树上经过的每个节点都要进入该节点的线段树,然后修改一下,所以这里应该在内层线段树里累加答案。

但是自己的写法是直接覆盖掉值,所以就会导致后修改的覆盖先修改的。

哎呦这都有90分真是撞大运了。

所以如果按照我的写法,那可以再开一个map记录一下每个点有没有被修改过,如果修改过cnt+0,sum+now-v就行了。

2019.02.26

T1 哎呀这个想不出来不应该啊。首先有个显然的DP式子,然后发现这样数组开不下,这时候就要考虑优化状态,比如说线段树优化DP啊,或者单调队列斜率优化去掉一维啊等等。这里就可以用线段树优化DP,但是还有一个问题就是当第 \(i\) 个柱子的水位高度为 \(j\) 时,怎么求这个柱子对答案的贡献。

我们可以换一种思考方式,对于每个条件去计算它的贡献,比如在高度 \(v\) 要求没有水,那就对 \(0\sim v\) 区间加 \(1\)。这样就可以不重不漏算出每个的贡献了。

还有就是线段树上维护加和取\(\max\)标记的时候要想清楚真正的值 \(x\) 等于什么,是 \(\max(x+add,mx)\) 还是 \(\max(x,mx)+add\)

代码

T2 emmm把m打成n了...

如果这张二分图有完美匹配的话肯定无解,否则就找可能不在最大匹配中的点就好了。

T3 考场上一眼看出对 \(kq\) 分块... 然而后缀数组会T... 而且字符数组最大值只能是127...

所以我们用SAM就好了嘛。

对于\(k\leq block\)的部分很显然

对于\(q\leq block\)的部分,记录 \(L[i],pos[i]\) 分别表示在SAM上匹配了 \(s[1...i]\) 之后在SAM上的 \(pos[i]\) 节点,且当前最大匹配长度为 \(L[i]\)

然后找到 \(pos[r[i]]\),如果 \(L[i]>len\),那么 \(i\)\(\text{parent}\)树上的所有子树中的点都是符合条件的。所以我们从 \(pos[r[i]]\) 开始向上倍增找出第一个 \(p\) 使得 \(L[p]>len\),那么 \(p\)\(sze\) 就是答案了。

2019.02.28

2月的最后一天!

T1 emm想了半天的贪心+二分,最后发现直接大的匹配小的就是最优的了。

T2 就是trie树上跑2-SAT,直接连边的话发现边数有n^2种,优化一下,搞出来前缀后缀节点就好了。

T3 咕

2019.03.01

T1 跟之前做过的一道题挺像的,随便写了写就过了,但是两个log的做法跑的飞慢(喜提rk倒一)。

正解是这样的 :

首先有个大家都知道就我不知道的性质:在树上给定两个点集,求两个点集之间最远的两个点的距离。性质是这两个点一定是两个点集中的直径中四个端点中的两个。问题推广到多个点集也是成立的,就是两两取直径端点算一下,最后取最大值就好了。

那这道题就可以维护把询问点看成一个点集,联通块内剩下所有点看成另一个点集,所以维护联通块直径就行了。

T2 考场上看出来大概是决策单调性了但是...不会写啊

第一步:发现这似乎就是个01背包没什么特别的,但是如果这数据范围能推广的话那以前学的01背包岂不是屁用没有了?所以发掘数据的隐藏性质。

发现每个物品的体积都很小很小,考虑对每个体积单独做。

有个显然的性质是如果要选 i 个体积为 j 的物品,那选出来的一定是体积为 j 的物品中价值前 i 大的。

首先枚举一个体积 v ,可以列出来DP式子 \(f[i]=\max(g[x]+w[i-x])\),其中 \(w[i]\) 表示前 i 大的体积为 v 的物品的价值和。

这东西看上去很难精简状态了,所以考虑优化转移。

优化转移就那几个套路的东西,比如说单调队列优化,数据结构优化,斜率优化,决策单调性优化等等。这里就是决策单调性优化,套上个分治就行了。

T3 咕了咕了

2019.03.04

T1 因为树的计数问题经常和prufer序列混在一块,所以在这里我们也可以考虑prufer序列。

\(f[i][j]\) 表示选了 \(i\) 个点,在prufer序列中出现了 \(j\) 次的方案数,然后就可以转移了。

T2 考场上就差一步容斥啊

首先可以用树形DP求出来 \(f[i]\) 表示选原树上至少 \(i\) 条边的树的个数,然后就可以容斥一下了。

注意这里的至少是:钦定选 \(i\) 个,其它任选的方案数,这跟正常的至少还是有点不一样的。

再设 \(g[i]\) 表示选原树上恰好 \(i\) 条边的树的个数,那么根据容斥,就有:\(f[i]=\sum\limits_{j\ge i} \binom jig[j]\) 。含义就是统计恰好在至少中的贡献,怎么统计呢?枚举通过至少钦定的这些边中,有多少是恰好中的边,共有 \(\binom ji\) 种情况。

这个式子就可以二项式反演或者直接减都行了。

T3 首先这个风扇平衡的条件是,扇叶由若干个环组成,每个环都满足:相邻两个扇叶都相差同样的距离。

环有两种,一种跟s连,一种跟t连,有交点的再连。

这就成了最大独立集问题,求方案比较麻烦,可以从源点bfs,能走到的左部点与不能走到的右部点都是没有割掉的点。

2019.03.05

考试再不好好考就要完了啊

T1

emmm是一道结论题,结论就是这虽然是一个环但是肯定有某一条边不会有人经过的。也就是说存在一条边使得,从这条边出发后的每个时刻都有前缀和不小于经过的点数和。然后就可以按照从这个起点按照这个顺序贪心了。

T2

哇这个确实没想到可以反转接在后边的神仙操作...

知道了这个结论就可以很方便的做了,对权值开个树状数组维护以 i 结尾的最长上升子序列以及方案数就行了。

T3

sb计算几何+NTT

不想调

2019.03.07

今天海星

T1

被老师叫上楼D了一顿之后突然有个神奇的想法,不知道这是不是对的,好虚啊不敢写啊...

纠结了半天之后写了写调了调,发现过了样例... 然后又乱搞了一下记忆化一下就A了

就是设 \(f[i][j]\) 表示从A串的第 \(i\) 位 B串的第 \(j\) 位开始放数的方案数,如果 \(a[i]\ne a[j]\) 很好转移,但是如果 \(a[i]=a[j]\) 就很麻烦...

自闭了半天忽然想到对于连续的一大段相等的一起转移,再记忆化一下就赢了。

upd:艹卡特兰数都没看出来,最近有做DPD傻了的趋势,我退役吧

T2

考过无数次了。不讲

T3

写完T1之后只有一个小时了啊...

感觉大方向就是线段树上维护标记但是实在没想到...

正解挺巧的,如果这个区间的最大值和最小值的变化量相等的话,那么直接给整个区间加上变化量,否则递归计算。复杂度有保证,是因为除一遍之后区间最大最小值的差都会至少减半,最多减\(\log\)次就可以合在一起计算了。

2019.03.09

md这场策略严重失误

刚了两个半小时T1 发现了结论但是又给否定了 然后心态爆炸弃疗 滚去做T2 花了15min切掉,一眼秒掉T3是个傻逼倍增+大模拟 还剩一个半小时大概能写完 然后

码码码码码码码码码码码码码码码码码码码码码码码码码码码

卧槽怎么就一个小时了

码码码码码码码码码码码码码码码码码码码码码码码码码码码

卧槽怎么就二十分钟了

码码码码码码码码码码码码码码码码码码码码码码码码码码码

卧槽码不完了啊

摔键盘

mdzz

T1

打表找规律发现第一个和第三个数要模2,第二和第四个数要模三。emm我记得清清楚楚考场上明明发现这个规律了,但是不知道当时怎么想的就没管?

T2

傻逼题直接盒子放球就行

T3

傻逼倍增

细节真他妈的多

你们随意感受一下

2019.03.12

T1

考试的时候想当然,然后就走远了

先考虑弱化版本,即遍历一棵树的最小时间花费,显然是2(n-1)-树的直径

对于基环树也类似,我们先求出来基环树的直径,如果这个直径完全在某个子树内,那答案就是2n-D-H,其中D是直径,H是环长。

否则答案就是2(n-1)-D

那么怎么求基环树直径呢?

首先找环出来,然后对于每个子树求出子树内直径和每个子树向下最长延伸多长。

然后求出直径经过环上的情况,拆环成链后面倍长,之后单调队列优化就行了。

代码

T2

这不就是购票那题啊?

还好前几天做过不然GG了

zyz是tm真的能乱搞(惊叹

T3

垃圾骑士毁我青春

2019.03.14

我怎么这么菜了啊

T1

这个编辑距离只能n^2求所以正解就是乱搞...

这个考场上应该意识到的

T2

考场上把式子推到了要在n个数里选k个求\(\sum3^{sum}\)这个玩意儿,然而没发现这是分治FFT。。。我菜死了

所以直接分治FFT就行了,模数比较小,可以预处理单位根之后直接FFT,或者拆系数FFT也行。

T3

肯定是在虚树上面乱搞,写了一种好写的做法。

设两个倍增数组 \(f[i][j],g[i][j]\) 分别表示从 \(i\) 到上面第 \(2^j\) 个祖先,经过的点的子树中,刨掉 \(i\) 的子树后的最深深度,\(g[i][j]\) 则表示刨掉 \(i\) 的子树后到 \(i\) 的最大距离。

这两个数组合并和初始化都没什么问题,然后就可以在虚树上倍增了。

2019.03.18

T1

就是先找出来环,然后把环上每个点伸出去的子树都先缩成一条链,然后把这些链接进环里就行。

T2

发现如果对于一个格子,规定了来的方向,那么所有格子来的方向就都固定了,于是可以得到一个 n2m2 的dfs做法。

然后发现对于一行从前往后扫,每次不清空vis标记也是可行的,就变成n^2m了

T3

分块傻题。

标记凭啥可以合并啊。。。

2019.03.19

T1

简单贪心?

就是设当前点为now,如果下一个是R的话那就走到左上方的点,否则就走到右下方的点,观察到这样之后下一步不管去哪个点都会是按照要求的。所以这么做就行了。

T2

找性质,然后就没了。

T3

找性质,然后就摸了。

2019.03.21

T1

啊跟自己想的差不多,但是yjc的写法明显要优秀许多。

首先就是那个区间置为0,可以变成区间置为1,然后主要是栈序不会做,因为涉及到标记下放。

实际上可以不用下放标记,类似于标记永久化,如果当前区间全部为1,直接return查询区间长度即可。 然后栈序撤销就能做了,就是每次存下区间赋为1的区间是哪个,然后赋值之前的值是啥。

T2

T3

模拟费用流

2019.03.25

T1

woc这题牛逼

观察到这题有1和2的区别,但是有两个1相当于捆绑成一个2,所以我们暴力枚举有多少个小塔取了奇数个,那么剩下的小塔用了偶数个,可以两两在组内配对,然后和大塔一起盒子放球就行。

T2

傻逼题,啊呀又犯傻逼错误

T3

那个tp=1的很好想,就是从一个点出发选很多条链。犯傻逼的地方是,做背包的时候到了3个就不再往上加了,实际上只要大于等于3个都行,mdzz。

2019.03.26

T1

主要是这个拓扑序没想到

首先发现这个黑点和白点都是DAG,都没有环,所以先把他们的拓扑序搞出来。

对于一个黑点,设mn表示黑点连到的白点中,最小的拓扑序,mx表示连到黑点的白点中,最大的拓扑序。

一个黑点一定会被删当且仅当mn<mx

然后剩下的点还有一些应该被删去,两个黑点i,j同时被保留的条件是mn[i]<=mn[j],做一遍lis就行了。

T2

T3

还是得手玩+归纳。


posted @ 2018-12-26 21:19  YoungNeal  阅读(487)  评论(2编辑  收藏  举报