首页 > 其他分享 >2022.12 做题记录

2022.12 做题记录

时间:2022-12-30 17:56:06浏览次数:67  
标签:gcd 记录 sum 容斥 CF 2022.12 mathcal dp

目录

CF 1758 E(图论,连通块)

CF 1761 D(dp,组合数学)

CF 1761 E(图论,构造)

CF 1748 D(位运算,构造)

CF 1774 E(结论,树形 dp)

CF 1774 F2(结论,性质,数据结构)

CF 1762 F(性质,结论,dp,线段树)

CF 1749 F(树上差分,树状数组)

CF 1749 E(01BFS,转化)

CF 1743 E(dp 状态设计)

CF 1767 C(dp 状态设计)

luogu P8906(图论,分层图,分类讨论)

luogu P8907(转化,set 启发式合并)

CF 1740 F(结论,转化,计数 dp)

CF 1750 D(gcd,分解质因数,容斥)

CF 1750 E(括号序列,结论)

CF 1750 F(容斥,计数 dp)

部分题解

luogu P8906(图论,分层图,分类讨论)

USACO 2022 DEC P T1

方法一:

因为是求恰好 \(k\) 步,且 \(k\) 较小,所以可以考虑建出分层图跑 SPFA。

有 \(\mathcal{O}(nk)\) 个点,\(\mathcal{O}(n^2k)\) 跳边,因此单次更新的复杂度为 \(\mathcal{O}(n^2k)\),总复杂度就是 \(\mathcal{O}(n^4k)\)。

但是由于每次加边的特殊性,卡不满,因此可以通过。

方法二:

注意到 \(k\) 最大只有 \(8\),如果我们折半一下,对 \(1\) 到 \(i\) 的最短路和 \(i\) 到 \(n\) 的最短路分别维护,最大的边数就只有 \(4\)。

这启示我们可以使用一种不对 \(k\) 具有普适性的做法:分类讨论。

可以做到 \(\mathcal{O}(n^3)\)。

luogu P8907(转化,set 启发式合并)

USACO 2022 DEC P T2

删除一个点之后会把这个点连向的点互相连边,假设这个点连向的点构成的集合为 \(p\),大小为 \(k\)。

对于边 \((i,j)(i<j)\),考虑在 \(i\) 处计算贡献。

把集合的元素按照从小到大排序后,最小的元素为 \(p_1\),只需要把 \(p_1\) 向所有 \(p_i(i>1)\) 连边就行了,这与之前的连边方式是等价的。

于是只需要对于每个点,维护它能连向的所有比它大的点的集合,使用 set 启发式合并即可做到 \(\mathcal{O}(n\log^2 n)\)(假设 \(n\) 和 \(m\) 同阶)。

CF 1740 F(结论,转化,计数 dp)

非常妙的转化。

对满足某种条件的可重集,可以先思考如何判定一个可重集满足条件。

设数字 \(i\) 的出现次数为 \(cnt_i\),可重集中的元素为 \(M_i\),且强制让其大小为 \(n\),不足的补 \(0\)。

首先,对于一个大小为 \(k\) 的集合 \(M\),它合法,有一个必要条件:\(\sum_{i=1}^{k}M_i\leq \sum_{i=1}^{n}\min(k,cnt_i)\)。

其次,如果两个可重集的大小相等,我们肯定希望其中的元素尽量大,因为这样才最有可能不满足条件。

也就是说,我们可以把 \(M_i\) 从大到小排序,判断每个前缀 \(1,2,3\cdots k\),是否满足 \(\sum_{i=1}^{k}M_i\leq \sum_{i=1}^{n}\min(k,cnt_i)\) 即可。

知道了这步转化之后本题就很简单了,我们直接对这样的集合 \(M\) DP。

设 \(f(i,j,k)\) 表示从大到小考虑了集合 \(M\) 的前 \(i\) 个元素,元素和为 \(j\),其中最小的数为 \(k\) 的方案数。

注意到 \(k\leq \lfloor\frac{n}{i}\rfloor\),那么使用前缀和优化可以做到 \(\mathcal{O}(n^2\log n)\)。

CF 1750 D(gcd,分解质因数,容斥)

一道需要注意实现技巧的题。

做法很显然,第一个位置一定填 \(a_1\),对于后面的位置 \(i\),能填的数为满足 \(\gcd(a_{i-1},x)=a_i\) 的所有 \(x\)。

我刚开始的做法是利用 gcd 的性质对于每种质因数分类讨论,然后容斥,复杂度为 \(\mathcal{O(n\sqrt{m})}\),因为每次要重新分解质因数。

但是,有一个显然的性质,\(a_i | a_{i-1}\),且 \(a_i\) 如果有解必然单调不升。

那么,就可以转化为求满足 \(\gcd(\frac{a_{i-1}}{a_i},x)=1\) 的所有的 \(x\),假设每次分解的数为 \(t_i\),那么满足 \(\prod t_i\leq m\),这样总复杂度就大约是 \(\mathcal{O}(n+\sqrt{m})\)。

CF 1750 F(容斥,计数 dp)

计数题,使用之前的技巧,考虑什么样的状态合法。

首先,\(s_1=s_n=1\)。

其次,不难得出一个性质,如果最后能够全部变成 \(1\),那么可以通过每次合并相邻的 \(1\) 的段,使得最后的结果为 \(1\)。

但是,有一个很严重的问题是,我们无法准确地描述一个合法的状态应该满足什么条件。

正难则反,考虑容斥,思考什么样的状态不合法。

一个状态不合法,它最后一定可以得到一些 \(0\) 和 \(1\) 相间的连续段,满足任意两个相邻的 \(1\) 的连续段不能合并。

另外,我们不妨钦定最左边和最右边的连续段为 \(1\),因为如果不为 \(1\),最后整个串肯定不能变为 \(1\),而我们对这样的串计数是没有意义的。

考虑这样的最终状态能够得到多少不合法的初始状态。

记 \(f_i\) 表示长度为 \(i\) 的合法状态数。

那么能得到的不合法的初始状态的数量为 \(\prod f_{len_i}\),\(len_i\) 表示第 \(i\) 个 \(1\) 的连续段的长度。

另外记 \(g_{i,j}\) 表示长度为 \(i\) 的状态,分成若干段,其中最后一段长度为 \(j\) 的方案数。

为了方便转移,钦定 \(g_{i,i}=f_i\)。

于是有转移

\[g_{i,j}=f_j\sum_{x=1}\sum_{y=1}g_{i-x-j,y}[j+y<x] \]

另外,有一个等式

\[f_i+\sum_{j=1}^{i-1}g_{i,j}=2^{i-2} \]

于是可以递推算出 \(f\) 和 \(g\)。

直接做是 \(\mathcal{O}(n^4)\) 的,但是仔细分析一下边界发现转移可以写成

\[g_{i,j}=f_j\sum_{x=1}^{i-j-1}\sum_{y=1}^{x-j-1}g_{i-j-x,y} \]

大概是一个三角形区域的和,使用前缀和优化可以做到 \(\mathcal{O}(n^2)\)。

标签:gcd,记录,sum,容斥,CF,2022.12,mathcal,dp
From: https://www.cnblogs.com/yanchengzhi/p/17015494.html

相关文章

  • HDLBits--Verilog习题记录4
    4.Circuits---SequentialLogic---LatchesandFlip-Flops----Edgecaptureregister问题描述:Foreachbitina32-bitvector,capturewhentheinputsignalchanges......
  • openwrt安装及分区记录
    配置地址为/etc/conf/network重启网络/etc/init.d/networkrestart分区fdisk/dev/sdan创建分区p默认3理论上这时候只有两个看情况加一回车到结束w退出......
  • 「Note」闲话 2022.12.30(《浅谈Splay与Treap的性质及其应用》学习笔记)
    屎一样的一年还有两天就过去了呢。感觉都阳了一周了还是没有回复到正常状态,真的挺讨厌的。今天随便找了篇论文假学习了一会儿。由于懒,所以大量内容属摘抄。平衡树的fin......
  • HDLBits--Verilog习题记录3
    3.Circuits---SequentialLogic---LatchesandFlip-Flops----Detectanedge问题描述:Foreachbitinan8-bitvector,detectwhentheinputsignalchangesfrom0......
  • vivo手机便签怎么记录恋爱天数?
    很多年轻人都在使用vivo手机,因为它不仅外观时尚、拍照优秀,而且有高中低多个区间价位段的手机可供用户选择。而有不少网友在使用vivo手机时,都有这样的需求,这就是vivo手机便......
  • 2021届华为提前批面试记录
    文章目录2020年06月09日参加华为提前批AICloud云计算部门技术面试记录(下午5:00-6:30面试官最后说时长要自己把握一下,不要太长)总体是先结合项目提问,最后手撕代码。用......
  • leetcode-551. 学生出勤记录 I
    551.学生出勤记录I-力扣(Leetcode)字符串序列计数funccheckRecord(sstring)bool{absentCnt:=0cLateCnt:=0fori:=0;i<len(s);i++{......
  • 踩坑记录:关于window.open()打开接口被拦截
    今天遇到一个问题,业务是这样的,前端这边打开一个后端提供的页面,后端做重定向到一个动态的链接地址。预期是点击一个按钮执行如上后续业务,实际是第一步就被拦截住的,提示无......
  • mysql记录查询的sql
    showprocesslist;二、mysql查看已经执行的历史sql语句(方法:开启日志模式)开启日志SETGLOBALlog_output='TABLE';SETGLOBALgeneral_log='ON';查看是否开启showvaria......
  • make: *** No rule to make target Stop.问题解决记录
    今天使用MounRiverStudio编写MCU程序时,遇到报错make:***Noruletomaketarget'D:/work_2022/13-617充电器/CH32V307EVT/EVT/EXAM/SRC/Peripheral/src/ch32v30x_adc.......