6月份杂题简要题解(持续更新中)

这里面是6月份做的一些杂题稍微记录下,方便复习,有些是因为比较简单,有些则是因为时间比较赶,所以没有专门写整篇的题解来整理,题解会较为简略

  1. [NOI2018] 冒泡排序
    满足题目要求的序列可以分成不超过两条的上升序列,设\(f_{i,j}\)表示选了\(i\)个数,最大为\(j\)的方案,\(f_{i,j}\)可以转移到\(f_{i+1,j+k}\),可以看成卡特兰数,对于一个限制\((x,y)\),相当于从\((x-1,y+1)\)出发

  2. CF1523F Favorite Game
    对于每个\(x\),最多填\(\frac{n}{x}\)段,调和级数复杂度\(n\log n\),对于\(x\),离线,只保留长度\(\geq x\)的边,对于区间\([l,r]\)树套树维护

  3. CF1523H Hopping Around the Array
    可以往右跳或删中间的点,如果只有往右跳可以倍增处理,多一维维护删多少中间的点,统计答案类似倍增去枚举,对于删的点数多少一起统计,只要有一个能跳到就不加进答案,不然就全都要跳,细节可能有点多调到自闭

  4. [JLOI2016]成绩比较
    直接推,要把二项式暴力拆开,后面二项式反演(容斥)一下即可

  5. [CTS2019]随机立方体
    直接推,要敢于去推,会发现后面会消掉很多复杂的东西

  6. [CTS2019]氪金手游
    对于反向边考虑容斥,树上\(dp\)一下即可

  7. [MtOI2018]情侣?给我烧了!(加强版)
    不会生成函数,考虑容斥,发现搞不出来,但是烧情侣不能放弃,考虑组合意义,类似错排的转移

  8. CF1536F Omkar and Akmar
    发现后手必胜,组合数学算出答案然而智障的我在组合数学算答案中卡了好久

  9. [NOI2012] 迷失游乐园
    首先考虑树的情况,设\(dp\)表示\(x\)出发向上或向下的期望,树形\(dp\)计算,基环树的情况,把环单独提出来,对于非环的点计算方法一样,环上的点对于每个点顺时针、逆时针各做一遍

  10. [AGC006C] Rabbit Exercise
    容易发现,操作第\(i\)个后,\(a_i\)->\(a_{i-1}+a_{i+1}-a_i\),对于\(a\)差分后,实际上是交换差分数组上相邻的两个值,用类似快速幂去置换实现(不知道这个东西叫什么)

  11. [AGC006D] Median Pyramid Hard
    二分,把序列缩成\(01\)串再去做

  12. [AGC006F] Blackout
    \(3\)种颜色,\(x\)->\(y\)->\(z\)->\(x\)\(x\)红色,\(y\)蓝色,\(z\)绿色,红->蓝->绿,如果染色失败则会形成一个完全图

  13. [SNOI2020] 字符串
    把串取反,变成修改前缀,贪心匹配,建广义后缀自动机,树上统计

  14. [NOI2011] 智能车比赛
    很显然只有格点有用,往右时直接维护到每个格点的答案以及它此时能直线走到的区间,暴力做就好了调到自闭

  15. [六省联考 2017] 相逢是问候
    扩展欧拉定理,线段树维护答案,\(a_i\)->\(c^{a_i}\)->\(c^{c^{a_i}}\)->...在\(\log\)级别次后会保持不变,在没保持不变之前可以在线段树上单次修改,做一些提前预处理方便计算

  16. [NOI2020] 美食家
    首先容易想到\(k \cdot (5n)^3 \log T\)的矩阵快速幂做法,考虑倍增,可以预处理\(\log T\)个矩阵,然后倍增+矩阵乘法做,复杂度优化到\(\mathcal O((5n)^3 \log T + k(5n)^2 \log T)\)

  17. [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\)优化一下

  18. [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\)集合里的树没法被表示出来

  19. [SDOI2017]数字表格
    以下除法均只保留整数位

\[n \leq m \]

\[\begin{align*} Ans &= \prod_{i=1}^n \prod_{j=1}^m f(\gcd(i,j)) \\ &= \prod_{d=1}^n f(d) ^ {\sum_{i=1}^{\frac{n}{d}} \ \sum_{j=1}^{\frac{m}{d}}\ [\gcd(i,j)=1]} \end{align*} \]

\[\begin{align*} \sum_{i=1}^{\frac{n}{d}} \sum_{j=1}^{\frac{m}{d}} [\gcd(i,j)=1] &= \sum_{i=1}^{\frac{n}{d}} \sum_{j=1}^{\frac{m}{d}} \sum_{t|\gcd(i,j)} \mu(t)\\ &= \sum_{t=1}^{\frac{n}{d}} \mu(t) \frac{n}{dt} \frac{m}{dt}\\ \end{align*} \]

\[T = dt \]

\[\begin{align*} Ans &= \prod_{d=1}^n f(d) ^ {\sum_{i=1}^{\frac{n}{d}} \ \sum_{j=1}^{\frac{m}{d}}\ [\gcd(i,j)=1]} \\ &= \prod_{d=1}^n f(d) ^ {\sum_{t=1}^{\frac{n}{d}} \ \mu(t) \frac{n}{dt} \frac{m}{dt}} \\ &= \prod_{T=1}^n \prod_{d|T} f(d) ^ {\frac{n}{T} \frac{m}{T} \mu(\frac{T}{d})} \\ &= \prod_{T=1}^n (\prod_{d|T} f(d) ^ {\mu(\frac{T}{d})}) ^ {\frac{n}{T} \frac{m}{T}} \end{align*} \]

  1. 洛谷P5179 Fraction
    分类讨论,可以证明符合条件的\(q\)最小时的\(p\)最小同时也满足符合条件的\(p\)最小

  2. [CQOI2017]小Q的表格
    可以发现,修改完\(f(a,b)\)后,会发生修改的\(f(x,y)\)满足\(\gcd(x,y) = \gcd(a,b)\)

\[b \cdot f(a, a+b) = (a+b) \cdot f(a, b) \Leftrightarrow \frac{f(a, a+b)}{a(a+b)} = \frac{f(a,b)}{ab} \]

\[g(i) = \frac{f(i, i)}{i^2} \]

\[\begin{align*} \sum_{i=1}^k \sum_{j=1}^k f(i,j) &= \sum_{i=1}^k \sum_{j=1}^k g(gcd(i,j))ij \\ &= \sum_{d=1}^k g(i)i^2 \sum_{i=1}^{\frac{k}{d}} \sum_{j=1}^{\frac{k}{d}}ij \\ &= \sum_{d=1}^k g(i)i^2 \sum_{i=1}^{\frac{k}{d}}i^2 \varphi(i) \end{align*} \]

后面那坨可以线性筛,由于本题需要维护修改、查询,根据数据范围,修改与查询只能用\(\sqrt{n}\)的时间,可以分块记录信息,查询时数论分块一下,然后\(\mathcal O(1)\)通过分块计算前缀和

  1. [NOIP2020] 微信步数
    不同维度不会相互影响,对于一个维度,仅保留可行区间,画图可发现除了第一轮和最后一轮外,其他每一轮的情况都是一样的,可以求出第二轮每一步的情况,后面轮对应步的情况相同,同时求出第二轮整轮总的情况,然后列式子,对于每一步对应的情况,对于不同维度之间的乘积可以展开,得到\(k+1\)次多项式,可以用拉格朗日插值解决

  2. CF995F Cowmpany Cowmpensation
    通过归纳法可以证明对于以节点\(i\)为根的子树来说,它的答案为一个\(siz_i\)次多项式,先树形\(dp\)求出以\(1\)为根且\(1\)\(1\)~\(n+1\)的答案的前缀和,然后拉格朗日插值一下

posted @ 2021-06-09 17:53  clfzs  阅读(115)  评论(0)    收藏  举报