6月份杂题简要题解(持续更新中)
这里面是6月份做的一些杂题稍微记录下,方便复习,有些是因为比较简单,有些则是因为时间比较赶,所以没有专门写整篇的题解来整理,题解会较为简略
-
[NOI2018] 冒泡排序
满足题目要求的序列可以分成不超过两条的上升序列,设\(f_{i,j}\)表示选了\(i\)个数,最大为\(j\)的方案,\(f_{i,j}\)可以转移到\(f_{i+1,j+k}\),可以看成卡特兰数,对于一个限制\((x,y)\),相当于从\((x-1,y+1)\)出发 -
CF1523F Favorite Game
对于每个\(x\),最多填\(\frac{n}{x}\)段,调和级数复杂度\(n\log n\),对于\(x\),离线,只保留长度\(\geq x\)的边,对于区间\([l,r]\)树套树维护 -
CF1523H Hopping Around the Array
可以往右跳或删中间的点,如果只有往右跳可以倍增处理,多一维维护删多少中间的点,统计答案类似倍增去枚举,对于删的点数多少一起统计,只要有一个能跳到就不加进答案,不然就全都要跳,细节可能有点多调到自闭 -
[JLOI2016]成绩比较
直接推,要把二项式暴力拆开,后面二项式反演(容斥)一下即可 -
[CTS2019]随机立方体
直接推,要敢于去推,会发现后面会消掉很多复杂的东西 -
[CTS2019]氪金手游
对于反向边考虑容斥,树上\(dp\)一下即可 -
[MtOI2018]情侣?给我烧了!(加强版)
不会生成函数,考虑容斥,发现搞不出来,但是烧情侣不能放弃,考虑组合意义,类似错排的转移 -
CF1536F Omkar and Akmar
发现后手必胜,组合数学算出答案然而智障的我在组合数学算答案中卡了好久 -
[NOI2012] 迷失游乐园
首先考虑树的情况,设\(dp\)表示\(x\)出发向上或向下的期望,树形\(dp\)计算,基环树的情况,把环单独提出来,对于非环的点计算方法一样,环上的点对于每个点顺时针、逆时针各做一遍 -
[AGC006C] Rabbit Exercise
容易发现,操作第\(i\)个后,\(a_i\)->\(a_{i-1}+a_{i+1}-a_i\),对于\(a\)差分后,实际上是交换差分数组上相邻的两个值,用类似快速幂去置换实现(不知道这个东西叫什么) -
[AGC006D] Median Pyramid Hard
二分,把序列缩成\(01\)串再去做 -
[AGC006F] Blackout
染\(3\)种颜色,\(x\)->\(y\)->\(z\)->\(x\),\(x\)红色,\(y\)蓝色,\(z\)绿色,红->蓝->绿,如果染色失败则会形成一个完全图 -
[SNOI2020] 字符串
把串取反,变成修改前缀,贪心匹配,建广义后缀自动机,树上统计 -
[NOI2011] 智能车比赛
很显然只有格点有用,往右时直接维护到每个格点的答案以及它此时能直线走到的区间,暴力做就好了调到自闭 -
[六省联考 2017] 相逢是问候
扩展欧拉定理,线段树维护答案,\(a_i\)->\(c^{a_i}\)->\(c^{c^{a_i}}\)->...在\(\log\)级别次后会保持不变,在没保持不变之前可以在线段树上单次修改,做一些提前预处理方便计算 -
[NOI2020] 美食家
首先容易想到\(k \cdot (5n)^3 \log T\)的矩阵快速幂做法,考虑倍增,可以预处理\(\log T\)个矩阵,然后倍增+矩阵乘法做,复杂度优化到\(\mathcal O((5n)^3 \log T + k(5n)^2 \log T)\) -
[NOI2020] 制作菜品
发现数据范围有一个\(n-2 \leq m\),容易发现\(n-1 \leq m\)的可以轻易构造出来,对于\(n-2 = m\)的可以证明如果有解一定可以分成两段满足\(n_1-1=m_1\),\(n_2-1=m_2\),其中\(n_1+n_2=n\),\(m_1+m_2=m\),然后就有\(n^2k\)的背包\(dp\)了,发现\(dp\)只需要开\(bool\)型即可,用\(bitset\)优化一下 -
[NOI2020] 超现实树
分类讨论,发现情况太多了,而且很多局面其实可以由其他局面转换而来,考虑构造,将所有的树分成两个集合\(A\)和\(B\),满足对于任意集合\(A\)里的树通过替换可以得到其他集合\(A\)里的树或集合\(B\)里的树,而集合\(B\)里的树无法通过替换得到集合\(A\)里的树
对于每次替换,把它缩成一步一步增加,对于一个节点,可以选择增加一个左儿子或右儿子,也可以选择同时增加一个左儿子和右儿子
对于某个集合\(A\)里的树\(A'\)如果它可以变成某个集合\(B\)里的树\(B'\),它可能有多种变换方法,所以要设定某种变换方法使得它们的中转点唯一,即\(A'\)->\(···\)->\(A''\)->\(B''\)->\(···\)->\(B'\)中的\(A''\)唯一,又由于每次变换会使深度增加\(1\)或不变,考虑\(A\)与\(A\)的变换每次使深度增加\(1\),\(A\)与\(B\)的变换使深度不变,所以我们可以构造出\(A\)集合为一条以根节点为一个端点的链上附着着一些单点,\(B\)集合为其他的树,然后按仅有左儿子,仅有右儿子,左儿子仅有一个节点,右儿子仅有一个节点\(4\)种情况去分治,判断能否满足只有有限个\(A\)集合里的树没法被表示出来 -
[SDOI2017]数字表格
以下除法均只保留整数位
-
洛谷P5179 Fraction
分类讨论,可以证明符合条件的\(q\)最小时的\(p\)最小同时也满足符合条件的\(p\)最小 -
[CQOI2017]小Q的表格
可以发现,修改完\(f(a,b)\)后,会发生修改的\(f(x,y)\)满足\(\gcd(x,y) = \gcd(a,b)\)
后面那坨可以线性筛,由于本题需要维护修改、查询,根据数据范围,修改与查询只能用\(\sqrt{n}\)的时间,可以分块记录信息,查询时数论分块一下,然后\(\mathcal O(1)\)通过分块计算前缀和
-
[NOIP2020] 微信步数
不同维度不会相互影响,对于一个维度,仅保留可行区间,画图可发现除了第一轮和最后一轮外,其他每一轮的情况都是一样的,可以求出第二轮每一步的情况,后面轮对应步的情况相同,同时求出第二轮整轮总的情况,然后列式子,对于每一步对应的情况,对于不同维度之间的乘积可以展开,得到\(k+1\)次多项式,可以用拉格朗日插值解决 -
CF995F Cowmpany Cowmpensation
通过归纳法可以证明对于以节点\(i\)为根的子树来说,它的答案为一个\(siz_i\)次多项式,先树形\(dp\)求出以\(1\)为根且\(1\)取\(1\)~\(n+1\)的答案的前缀和,然后拉格朗日插值一下

浙公网安备 33010602011771号