5、6月记录
https://www.luogu.com/article/bvovtmzp
希望能补上的:
https://www.cnblogs.com/xiaoziyao/p/17533907.html 浅谈集合划分容斥
https://www.cnblogs.com/alex-wei/p/set_power_series.html 集合幂级数相关
生成函数之类的。
76.CF1967 Codeforces Round 942 (Div. 1)
CF1967A
CF1967B1
反过来也能推到。
CF1967B2
枚举 ,因为 ,所以 , 同理。
容易做。
CF1967C
一个树状数组的结构。
相当于 次前缀和下的组合系数。
用树状数组模拟求出 ,乘上对应系数可以求出 。
CF1967D
CF1967E1
经典双直线 。
77.CF1965
78.CF1969
CF1969E
记录每个点上的数前一个出现和后一个出现的位置。
合法区间是 个二维矩阵。
扫描线求出 表示以 为右端点,最大的不合法左端点。
按照 排序,最大的 一定要修改(必要性),记已经修改过的 为 ,若之后的 ,有 ,则跳过,一定最优。
79.CF335E
考虑知道 求 。
对于一个高度为 的楼房,概率为 ,高度 的概率为 ,小于的概率即为 。
考虑从一栋楼的第 层出发的通道的期望长度(除去最左点),则有:
得到对于 的贡献也是 ,所以 。
注意,这里只能推出 走第 层的通道对 的贡献。
再考虑知 求 。
这里就不同了,因为 对每一层不同的分配数量对 的贡献都有一个不同系数。
考虑从低往上考虑,不断将最大值限制提高。
设当前高度为 ,长度为 ,则有:
再加上高度为 的 。
时间复杂度 ,好像可以矩阵优化。
80.CF1612F
设 表示时刻 ,手中最大盔甲为 时最大的武器。
时间复杂度 。
分析知,。
81.CF1866E
设某两天使用一台电梯,中途肯定在花费最小的地方行驶。
故记录三个电梯最近使用的时间即可,时间复杂度 。
82.CF1601E
83.P7470 [NOI Online 2021 提高组] 岛屿探险
84.P6846 [CEOI2019] Amusement Park
DAG
定向方案数,枚举独立集子集容斥。
容斥系数还有子集反演这种理解方法。https://www.cnblogs.com/Pbriqwq/p/15429971.html#_label2
85.AT_abc306_h
独立集中可以有边,因为有等号,故容斥系数改为 。
86.UOJ #37. [清华集训 2014] 主旋律
记 表示形成强联通分量的方案数。
考虑容斥计算不形成强联通分量的方案数。
枚举入度为 的子集(缩点后),即其对应的原图的点集,然后容斥。
当 时,。
考虑 ,当 时,系数为 ,否则我们(定顺序)枚举包含最后一点 的强联通分量 ,有:
时,。
要注意上面两个式子看似有循环定义,其实不然。
因为转移 时如果 则 ,因此可以先处理 时的部分 ,再转移到 ,最后再转移回 。
87.UVA1489
若有一个数没有卡到上界,那么后面的位一定能够异或得到 。
每个数有上界,求异或和为 的方案数。
考虑枚举第 位,前面大的位每个数都卡着上界,当前位从小到大第 个数不再卡着上界,而编号 的数当前位随便选。
记 表示 的数的异或和为 的方案数。
然后除了 这个数的其他数后面小的位随便选。
88.CF1874E Jellyfish and Hack
拉格朗日插值倒推系数。
89.P10221 [省选联考 2024] 重塑时光
真的能重塑时光吗?
考虑枚举形成了 段非空子集合,计算出方案数(集合去重)乘上对应的系数:
我们要统计的是子序列的方案数,计数的部分有两方面要考虑:
-
对于每个子集合,其序列为其导出子
DAG
的一个拓扑序。 -
每个子集看作一个点形成的大图是一个
DAG
。
记 表示集合 ,分成 个非空子集合的方案数(带上子序列方案数), 表示集合 ,分成 个非空的互不关联的子集合的方案数(带上子集合拓扑序方案数), 表示集合 ,导出的 DAG
的拓扑序方案数。
https://zhuanlan.zhihu.com/p/559453837
记 表示集合 连向集合 的边集合。
求 要 。
发现 后面的转移可以卷积,且次数不超过 ,具体来说,将 用生成函数形式表示。
将 带入,求出 的取值。
这样做的好处是数组卷积变成了单个数相乘,时间复杂度为 。
根据拉格朗日插值:
对于每个 ,右边乘式的分母容易求出,分子可以暴力多项式乘法 预处理总乘积,然后运用大除法(因为 ),这部分复杂度为 。
总复杂度为 。
鞅与停时定理复习
https://www.cnblogs.com/zltzlt-blog/p/18035649
90.AT_abc304_h
区间拓扑序贪心。
还原 ,然后,有一个显然的贪心思路:根据 从小到大考虑每个点,使每个点的拓扑序在满足要求的前提下尽可能小。
91.费用提前计算一类思想的总结
当前决策对未来行动的费用影响只与当前决策有关,过去考虑现在,过去计算现在的影响
- 选择一个决策会带来一个对未来的代价,但又不能通过在状态中再增加一维记录代价满足需求。这个代价是必然的,无论后面如何选择,都不会改变这个决策所带来的影响,这就是当前决策对未来行动的费用影响只与当前决策有关,我们可以把这个代价看作决策本身的费用,将未来的代价提前计算出来,在决策的时候就计算上它将会带来的代价,通过状态向后传递。
P2365 任务安排
P1220 关路灯
[ARC126D] Pure Straight
CF441E
方法一:
加法操作对一个数最大的影响是 。
对于后 位截断,,加法操作对前面位的影响只有平移和至多一次 。
设 表示 次操作后,最低 位为 ,的概率。
若 , 就表示 是几。
否则, 表示高位末尾几个连续的 。
方法二:
加法导致的进位只会影响到前面的位,而对于(未来产生的)后面的位没有影响
考虑从后往前倒着做,设 表示末尾进行了 次操作,是 次加法,然后是 次乘法的概率。
如果前面来个一个加法,则 。
否则:
- 若 为偶数,可以试做 个加法,;
- 否则,不管怎样,最低的 是不会改变的,直接贡献答案。
费用提前计算,答案为:
cin>>x>>k>>p,p/=100,f[0][0]=1.0;
for(int i=0;i<k;++i) for(int j=0;j<=i;++j) if(f[i][j])
{
if(!(j&1)) f[i+1][j/2]+=f[i][j]*p,ans+=f[i][j]*p*1ll; //这里为了方便理解,因为权值为1
f[i+1][j+1]+=f[i][j]*(1-p);
}
for(int i=0;i<=k;++i) ans+=__build_ctz(x+i)*f[k][i];
cout<<fixed<<setprecision(9)<<ans<<'\n';
方法三:
预支加法操作。
记 表示操作了 次之后的 ,再加上 之后末尾 的期望个数。
- 这一步是乘法,那么 是偶数,如果 是奇数,末尾就没有 ,否则是 ,算上概率。
- 这一步是加法,为 ,算上概率。
[ARC126D]
当前决策对未来的贡献与未来有关,现在考虑未来的,现在计算未来的影响
- 如果在当前决策把未来可能出现的情况提前计算好,通过状态传递到了未来,那到了未来是不是能直接把这个决策拿来用,是不是就能够进行转移了呢?
UVA10559 方块消除 Blocks
- 回顾这个问题,我们起初想使用费用提前计算,把每次对未来的贡献摊在当前自己身上。可是发现未来的决策并不只于当前决策有关,还与未来本身状态相关。于是又开了一维状态,将目光放长远,预测未来可能出现的状况并计算,记录在状态中传递到未来,并在未来直接使用,这依然是一类费用提前计算的问题。
P3354 [IOI2005] Riv 河流
P2053 [SCOI2007] 修车
92.[ARC132E] Paw
归纳证明一段不改变,左边是 ,右边是 。
这下只需要统计概率。
93.[AGC012D] Colorful Balls
94.[AGC007D] Shik and Game
95.CF335F
96.CF1973 Codeforces Round 945 (Div. 2)
D
发现 是最大值的倍数。
先问 ? 1 ni
,其中 ,当得到回答是 时,可知最大值。
每次可以 次询问探求 的可能值。
每一段长度至少为 ,共 段,则 ,有 。
这样查询次数就 了。
E
若 ,则答案为所有 的个数。
找到 的最小最大 ,为 。
必要条件是。
F
发现 是 因子, 是 因子,还有翻转的情况。
记 表示 的最多因子个数, 表示此类数所能有的最多质因子个数。
约为 个。
记 表示 的情况下满足的 个数。
记 表示 的情况下最小花费。
对于 :
-
对于 的,,。
-
对于 的,,。
-
对于上面两种情况都满足的,显然选第一种,,。
做完后,对 进行后缀狄利克雷差分,对 也进行一次,时间复杂度 ,打出来不是很大,这样就有了 。
对于单次询问,二分答案,可以做到 。
多次询问就整体二分。
97.AtCoder Regular Contest 177
https://www.cnblogs.com/maniubi/p/18192439
https://drive.google.com/file/d/1J2x8pIYQ3MXANgvzOgBciWd3d79j_Exa/view
98.[AGC057C] Increment or Xor
99. AGC001
E
F
100. AGC002
D
E
F
101. AGC003
D
E
F
要么上下左右都有,要么都没有,要么只有一者有。
前两种方案容易计算。
102. AGC047
C
原根的性质。
D
考虑 LCA
。
E
先得到一个 ,再求出一个位置的值的二进制,然后模拟二进制乘法。
F
啊啊啊,怎么都是盒图片。
神题!!!
每个时刻可以移动的范围一定是二维平面上一个矩形,并且每次扩展只能在矩形的角上扩展。
对于一个起点的问题,有时向左下向右上都行,将极限状态加入,压缩状态至 。
对于一个极长的相邻两个位置差为 的连续段,中间的所有点第一次扩展都是扩展到这个连续段,我们可以之后将每个连续段整体扩展。
分析一下,如果从小于 的位置开始扩展能扩展到第 段,则从第 段开始无法进行扩展。
证明:不妨设扩展到第 段时为向右上,这样第 段一定递增。如果从第 段开始时第一步能向左扩展,则左侧一段也是递增且该段的值域正好在第 段值域之下,此时这两段可以合并,矛盾。因此从第 段出发只能向右。而值为第 段值域下界减一的元素在这一段左侧(从左侧出发可以向右上扩展到这一段),因此从第 段向右不能向右下,只能向右上。而如果可以向右上扩展,则说明下一段为递增且下一段值域下界为这一段值域上界加一,此时这两段又可以合并,矛盾。因此从这一段开始无法进行扩展。
这样多扩展一段会关闭一个段的扩展,考虑一些极大的区间,。。。
然后一个段最多被扩展两次,被极大的区间,如最下面的图。
这样状态数是 的了。
103. AGC046
D
考虑记录保留的数,而先不考虑将其插入,可以 dfs
得到合法的 个状态,剩下长度为 的后缀,保留了 个 , 个 。
而每个合法的状态可以对应的结果有交,考虑对于结果构造,使其对应的状态只有唯一个。
发现对于合法的结果串,可得到他的所有状态都是合法的,对于不合法的结果串,可得到他的所有状态都是不合法的,一一对应。
对于结果串 ,找到最大的 使得 的长度为 的后缀是 的子序列,计算剩下 个数,可得到唯一的状态 。
记 ,表示有多少个结果串 (不管合不合法),对应唯一状态为 ,转移考虑枚举前面添加了 还是 ,贪心进行子序列匹配。
答案对于所有合法状态的 值求和即可。
E
一点不会。
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18174804
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!