蒟蒻日记_9月

楽楽,一直咕咕到09-07。
文化课好烦
到底是谁发明的暑假作业


09-01

楽楽,这天和 \(\color{black}{T}\color{red}{ianyilemon}\) 一起在晚自习润到机房。

· 【莫队】数颜色

带修莫队模板

一些优雅的东西。
实质上事多维莫队。
把查询按照左端点和右端点所在块进行排序,然后按照查询前的修改次数进行排序。
记块长为 \(b\) 则有复杂度为 \(O(\frac{mn^2}{d^2}+md+\frac{n^2}{d})\)
取块长为 \(n^{\frac{2}{3}}\) ,有复杂度为 \(O(n^\frac{5}{3})\)


09-02

忘了在干啥,反正没写题


09-03

忘了在干啥,反正没写题


09-04

· 【NOIP2015】神奇的幻方

纯模拟

纯模拟,小学经典结论。

· 【NOIP2015】子串

DP

\(dp(i,j,k,l)\) 表示 \(A\) 长度为 \(i\) 的前缀匹配到恰好 \(B\) 的长度为 \(j\) 的前缀,且分为 \(k\) 段,\(l\) 表示 \(A_i\) 是否被选到。

\[dp(i,j,k,0)=dp(i-1,j,k,0)+dp(i-1,j,k,1)\\ dp(i,j,k,1)= \begin{cases} dp(i-1,j-1,k,1)+dp(i,j-1,k-1,0)&,A_i=B_j\\ 0&,A_i\ne B_j\\ \end{cases} \]

\(\mathcal{O}(nmk)\) 通过~

为什么会有斗地主这种毒瘤码农题(恼


09-05

忘了在干啥,反正没写题


09-06

忘了在干啥,反正没写题


09-07

· 【NOIP2015】运输计划

树上差分,二分

二分答案后用树上差分来判断是否满足。
假设要判断的答案为 \(ans\)
那么我们预处理出每一条路径的长度和 \(lca\)
我们只需要减去长度大于 \(ans\) 的路径上的一条边,然后我们就用树上差分找到这些边的并集中边权最大为 \(\Delta\) 的一条边。
然后我们找到长度最大的路径,看其是否符合 \(dis-\Delta\le ans\) 即可。
很好的题呢~

· 【莫队】文件管理

莫队,BIT

BIT算逆序对,套一个莫队即可。

· 【莫队】小Z的袜子

莫队

几乎事莫队的板子。
我们只需要维护两只颜色相同的对数即可。


09-08

· 【莫队】由乃的商场之旅

莫队,装压,散列表

注意到字符集很小,而且我们只关心字串中的,因此我们只需要知道某个字符个数的前缀和的奇偶性。只有两种结果,可以状压表示,总共状态数为 \(2^{26}\) 但是有用的只有 \(\mathcal O(n)\) 个,可以搞。
然后注意到我们需要开桶来记录某个状态的个数。我给出的方法事:散列表,均摊 \(\mathcal O(1)\) ~
标答的方法:诶我用usinged short int不会炸空间诶,时间常数还小~
然后,注意到这是一道Ynoi的题,因此一定事一道毒瘤卡常题。lxl坏事做尽
然后就卡了好久(

以及莫队卡常技巧:对不同奇偶的块的右端点排序用相错的顺序。

今天还上了cxb老师抓的校友的课,找了一些CF题,其中一些还挺有趣的。先咕咕,改天写一点。
发现自己虽然学MO但是还是不会数论题


09-09

复习高联ing……
秒了16年的几何题,信心+=INF


09-10

继续复习高联……
打了四把扫雷,三把开局碰雷,一把最后无解状态 \(50\%\) 的概率猜错了。我坚信这是在攒rp。


09-11

高联考完我直接大大的好评,二试做出两题直接血赚!rp雀食攒了起来。
啥题都没写,高联考完直接开始搞我的艺术作业。日志
以及高联游记


09-12

今天主要是做2016的真题

· 【NOIP2016】换教室

期望DP,floyd

首先,思路很简单,求一个全源最短路,然后分该点是否来DP即可。
然后我floyd写挂了调了好久好久:)
真有我的。

· 【NOIP2016】组合数

组合数递推

问题不大.jpg

· 【NOIP2016】玩具谜题

模拟


09-13

淦,没法去机房!!!


09-14

· 【NOIP2016】天天爱跑步

树上差分,lca

智慧题目。
之前口胡做法:树剖+主席树,维护 \(w+dfn\)\(w-dfn\)
然后发现正解十分的智慧。
首先每一条路肯定能够去按照 \(lca\) 拆分成两条链,使得链上的点高度递增,这事容易的。
然后接下来一步可以从数学刻画的角度也可以从思维角度去想。
数学角度上,我们先考虑路径包含起点的一条链,假设 \(j\) 上的观察员观察到了,我们就有

\[w_j=dep_s-dep_j \]

也就是

\[w_j+dep_j=dep_s \]

然后我们就可以去根据这个去对这条链批量处理。
如果数据事一条链,我们可以直接树上差分来维护。
然而,答案事需要用桶来维护的,直接树上差分会导致从一个子树换到另一个子树的时候出现问题,并不能直接用传统的树上差分。
而这就是这题的神仙之处了!
我们还是维护桶,但是对点 \(s_i\) 我们要计算子树对桶 \(w_i+dep_i\) 的贡献,那其实我们没法直接递推,但是我们可以差分去维护它。
我们知道以 \(fa_i\) 为根的子树内,其儿子按照dfs的顺序为 \(son_1,son_2\cdots ,son_k\) 那么其实我们每递归完子树 \(son_l\) 我们可以得到 \(\sum\limits_{x=0}^l{cnt_{w_i+dep_i}}\) 的值,那么其中每一项我们不需要单独复制出来,也可以用差分查询以某一个儿子 \(i\) 为根的子树的 \(cnt_{w_i+dep_i}\)

真·树上差分


09-15

今天事gx来学校上课。讲了一些奇妙的CF题。

· 【Codeforces】CF1628 D.Game on Sum

DP,组合计数,数学

神仙多合一。

首先我们列出DP柿子。
注意到 A 和 B 的选择只和 B 前面选择正负的个数有关。因此我们只考虑接下来 \(i\) 次, \(j\) 次是选择正。
那么就有

\[dp(i,j)=\max_{0\le x\le k}\left\{\min\{dp(i-1,j-1)+x,dp(i-1,j)-x\}\right\} \]

然后我们发现两个一次函数的的交点在 \(\left(\dfrac{dp(i-1,j)-dp(i-1,j-1)}{2},\dfrac{dp(i-1,j-1)+dp(i-1,j)}{2}\right)\)
然后我们不难发现 \(dp(i-1,j)-dp(i-1,j-1)\in[0,2k]\) ,所以可以直接取 \(x=\dfrac{dp(i-1,j)-dp(i-1,j-1)}{2}\) 就得到 \(dp(i,j)=\frac{1}{2}(dp(i-1,j-1)+dp(i,j))\).

然后我们考虑去递推这个东西。
首先我们可以得到 \(dp(i,0)=0\) \(dp(i,i)=ik\) 作为边界条件。
其次,我们令 \(f(i,j)=2^{i}dp(i,0)\) ,然后就得到了一个很好的东西 \(f(i,j)=f(i-1,j-1)+f(i-1,j)\)
注意到这个东西和组合数比较相似,考虑把它放在类似杨辉三角的东西里。
然后这里有一个套路(指学不会),我们注意到边界条件 \(f(n,n)=2^nnk\) 对一个边的贡献即为 \(\binom{n-i}{m-i}\) ,那就可以 \(\mathcal O(n)\) 做完了。

剩下的写出来再更新。


09-16

· 【Codeforces】CF1630 B.Range and Partition

思维,双指针

这题核心就是如何判断 \([x,y]\) 是否合法。
事实上,我们令 \(b_i=1\)\(a_i\in[x,y]\) ,否则 \(b_i=-1\) ,我们就只需要取出 \(k\) 段使得每一段 \([l,r]\)\(\sum\limits_{i=l}^r{b_i}>0\) ,即 \(\sum\limits_{i=l}^r{b_i}\ge 1\)
而我们注意到对于 \(f(x)=\sum\limits_{i=1}^{x}b_i\) 我们只需要取出 \(k-1\) 个严格递增的点即可,这些点的首项 \(>0\) ,末项 \(<f(n)\)

从而我们可以推出 \(f(n)\ge k\)
然后,注意到 \(f(x)\) 是一个连续函数,这意味着一定可以取到 \(i\) 使得 \(f(i)=1\) ,并且在 \([i+1,n]\) 内取到 \(f(j)=2\cdots\)

于是我们的构造也出来了:直接贪心选取,使得前 \(k-1\)\(\sum\limits_{i=l}^r{b_i}=1\) ,于是就做完了。

· 【Codeforces】CF1630 D.Flipping Range

思维

CF评分虚高(
略显一眼的CF题(指可以直接口胡
首先,这个 \(B\) 序列我们取其最大公约数 \(l\) ,而题目中 \(B_i\le \dfrac{n}{2}\) 的条件使得这个 \(l\) 一定能够取到。
然后注意到每次操作中,所有下标模 \(l\) 的同余类中取了原数相反数的个数的奇偶性事一致的,因为每次操作都是恰好能够把所有的下标模 \(l\) 的同余类中取了原数相反数的个数的奇偶改变一次。
然后直接贪心选取即可。

祝明天(现在似乎得说今天)考PhO的同学取得佳绩!


09-17

· 【Codeforces】CF1632 D.New Year Concert

贪心,ST表

注意到 \(\gcd\) 随着区间增大而不增,利用这个单调性我们可以双指针来判断是否符合要求,并且用ST表来维护区间 \(\gcd\)
然后找出所有满足要求的区间后,我们可以发现区间总数不超过 \(n\) (这事因为区间不能包含,否则不满足上面所说的单调性)。
同时这事一个经典的贪心模型,直接求解即可。

· 【Codeforces】CF1572 B. Xor of 3

构造

首先,分类讨论后的构造事容易的。
其次,这事一道神仙题,欣赏就完事了。
image

· 【NOIP2017提高组】奶酪

数学,并查集

直接 \(\mathcal O(n^2)\) 判断是否联通,然后并查集搞一搞就可以了。

· 【NOIP2017提高组】时间复杂度

模拟

比较毒瘤的模拟题。
用栈模拟即可。
第一遍 \(80pts\) ,挂了两个点,不知道如果不能下载数据我要多久才能发现所有corner情况。

明天就要考CSP初赛了,但愿不会寄到分数线下(

09-18

今天烤初赛!游记


09-19

xs晚自习2h多写一题还没写完

· 【NOIP2017提高组】列队

树状数组/平衡树

好题!
思路首先事把最后一列单独拿出来,这事好想的。
然后接下来我们只需要从一个数组删掉一个下标的数据,再在后面添加一个数据。显然可以平衡树来做,但是众所周知,离线后树状数组可以很大程度上代替平衡树。

然后接下来事省空间的魔法。
平衡树做法下,可以考虑动态开点,然后每个点维护一个区间。
树状数组则可以考虑离线分别考虑每一行,对于从最后一列进入的元素和没有出列的元素分开算即可。前者可以用一个树状数组预处理每一行的情况,后者可以用vector,空间事 \(\mathcal O(n+m+q)\)

以及警钟敲烂,\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!\(MAXLOG\)一定要多取一点!


09-20

· 【CSP-S2019】划分

数学,贪心,单调队列

这题其实事有可能想出来的。
主要还是一个贪心,就是一段最小的时候最后一段一定最小。
然后就是很简单的单调队列的应用,除了卡空间有、毒瘤

· 【线段树】楼房重建

线段树

主要事一个pushup的事情。
然后我们维护一下区间最大值,区间能看到的楼层,以及右区间能看到的楼层。
然后pushup的时候对右区间线段树二分,把最多 \(\mathcal O(\log n)\) 段右区间能看到的楼层加起来。
然后最终复杂度就做到了 \(\mathcal O(n\log^2n)\)


09-21

晚上在机房做了信息合格考的模拟,就没怎么写题。

· 【模板】欧拉路径

图论板子

比较有趣的算法。


09-22

上课讲的东西有、简单,就把昨天想写的继续写完了

·【Codeforces】CF1634 E.Fair Share

欧拉图

神仙思路题
首先一点肯定每个数的个数都必须事偶数。

然后接下来就是魔法了。

我们建立无向图,每个集合和每个数都表示一个点,然后集合 \(S_i\) 每有一个数 \(x\) 就连一条边 \((S_i,x)\) ,这样我们就搞出了一个每个点度数都是偶数的二分图。然后我们希望把每个点的度数都对半分组,我们就考虑一个东西叫做欧拉图。
然后用欧拉图的边的方向来表示每个元素放在 \(L\) 还是 \(R\) ,就做完了。


09-23

礼拜天毕克会来给我们上课,但是似乎他不是很看得起我们,题目十分的氵(
挑了几题难的做了一下

· 【Codeforces】CF1213 F.Unstable String Sort

思维

什么氵紫

显然排序后的 \(S\) 是确定的,记为 \(T\)
如果 \(a_i=b_j\) ,那么就可以知道 \(T\) 下标为 \([i,j]\) 的字串的字符集大小为 \(1\)
然后贪心合并区间,这是一个经典模型。
然后就可以知道字符集的最大大小以及构造。
写了篇题解


09-24

打了一场洛谷月赛

· 【洛谷月赛LGR-121】Div2 A.冬之花

贪心

好臭的名字(恼

· 【洛谷月赛LGR-121】Div2 B.Bassline

贪心,双指针

我的做法是枚举左端点然后双指针维护,复杂度 \(\mathcal O(n\log n)\)

· 【洛谷月赛LGR-121】Div2 C.Rabbit

贪心,并查集

怎么这么多贪心题
首先可以考虑链上的情况。我们考虑根据每个区间的最大值来分治,这个是好用ST表做的(超级钢琴那题的套路),但是显然放到树上就没这么容易了。但是我们会根据这个分治得到一个贪心就是可以优先满足标号较小的点的配对。
然后我们就可以考虑从小到大维护,用并查集维护一下答案即可。


09-25

· 【国家集训队】阿狸和桃子的挑战

博弈,贪心

奇妙贪心题。
首先,注意到题目要求分数之差(我没注意到哈哈哈哈哈),那么必然可以做一点转化。
考虑把一条边分到两个点上,正确性显然。
然后排序一下做完了。

打了一场月赛,大寄特寄。
我不因该打到一半和zx讲话的。

· 【9月月赛】 Div1.A 骰子和硬币

数学

没意思的数学题

· 【9月月赛】 Div1.B 卡片游戏

贪心

贪!都可以贪!

· 【9月月赛】 Div1.D 染色游戏

数学

TMD考完一分钟发现一个 \(n\ge 6\) 就会出问题的bug。
\(k\) 次覆盖整个序列的方案数是 \(\binom{k-1}{n-k-1}\) ,然后随便算一算就出来答案了。


09-26

· 【线段树】[Usaco2008 Jan]猜数游戏

思维,二分,线段树

很好的一道题捏。
我们首先应当考虑到一个事情就是猜数的顺序是假的,同时我们会发现相同数的询问间是有很大联系的,因此考虑离线。
对于判断是否可行,我们从大到小排序后看每个数的合法区间是否被之前更大的数覆盖即可。
而对于 \(M\) 的求解,我们可以二分
总的来说,这次没有想到二分,是被答案问的东西给唬住了,没有想到离线判断。
同时可以注意一下这种一推条件问是否矛盾可以离线处理的套路。

· 【模板】nim博弈

SG函数

用nim游戏折磨了室友好久,就顺便来写一下板子。
到底是肾么神仙能够想出用二进制异或来刻画不能不取石子这个条件的/kel/kel


09-27

· 【NOIP2018提高组】旅行

基环树,贪心

首先字典序肯定可以贪!
其次我们注意到 \(m=n\) 的时候是一棵基环树,所以我们考虑找到删去的边。
直接暴力枚举是 \(\mathcal O(n^2)\)
找到环以及以 \(1\) 为起点时进环的点 \(ed\)
我们选择环上 \(ed\) 两侧中较小点开始计算,然后在环上跑的时候维护“如果此时断边下一个遍历到的点的标号”,然后贪心即可。


09-28

把洛谷上 \(\color{orange}{\text{普及-}}\) 的板子全切掉了。除此之外看了 NOIP2018 D2T2和 D2T3的题解。

posted @ 2022-09-07 23:01  思考人生中…  阅读(54)  评论(0)    收藏  举报