【补题】CF I
昨晚 CF 掉大分了。。。补一波以前比赛的题
CF745
D. Mathematics Curriculum
对于位置 \(i\),包含 \(i\) 的区间中不同最大值个数可以拆分到 \([1,i]\) 后缀最大值个数和 \([i,n]\) 前缀最大值个数,等价于笛卡尔树上祖先个数(可以从构建笛卡尔树时单调栈的角度考虑)。
题目转化为求有多少种大小为 \(n\) 的笛卡尔树,根的深度为 \(1\),深度为 \(m\) 的点数为 \(k\)
考虑 DP,设 \(f[i,j,k]\) 表示大小为 \(i\) 的笛卡尔树,深度为 \(j\) 的点数为 \(k\) 的个数,转移时把左右子树拼起来
然而这个 DP 是 \(O(n^{5})\) 的,需要卡常
CF727
E. Game with Cards
考虑倒序 DP,设 \(f[i],g[i]\) 为第 \(i\) 张卡放左/右手,第 \(i+1\) 张放在另一只手是否可行,以转移 \(f\) 为例。\(f[i]=1\) 的条件为存在 \(j\),使得 \(g[j]=1\),第 \(i\) 张卡在 \([i,j]\) 中可以一直呆在左手,\([i+1,j]\) 中的卡都可以放在右手
容易发现只需要考虑满足 \(g[j]=1\) 的 \(\min j\),时间复杂度 \(O(n)\)
- 倒序
- 贪心优化决策
F. Strange Array
精简一下奇异值的计算方式:对于 \(l\le i\le r\),记 \(x,y,z\) 为 \([l,r]\) 中小于、等于、大于 \(a_i\) 的元素个数,那么 \(i\) 的奇异值为 \(\max(\lfloor\frac{y+z-x}{2}\rfloor,\lfloor\frac{x+y-z-1}{2}\rfloor)\)(其实是把讨论 \(a_i\) 与中位数的大小写成了 \(\max\) 形式)
以计算 \(\lfloor\frac{y+z-x}{2}\rfloor\) 为例,可以以 \(i\) 为分界拆成两端,以 \([l,i]\) 为例。把 \(\le a_{i}\) 的元素记为 \(1\),\(>a_{i}\) 的元素记为 \(-1\),那么 \(\max y+z-x\) 即为 \([1,i]\) 的最大后缀和
实现上可以从小到达计算每个数值,线段树维护每个元素与当前数值的大小关系。时间复杂度 \(O(n\log n)\)
- 尝试精简题目给的计算方式而不是直接优化
CF725 (Div.3)
D. Another Problem About Dividing Numbers
一次除以 \(x\) 可以通过 \(y\) 次除以 \(x\) 的约数代替(\(x=\prod p_{i}^{c_{i}},y\le \sum c_{i}\)),简单算出上下界即可。需要特判 \(k=1\)
F. Interesting Function
考虑第 \(i\) 位,其变化次数为 \(\lfloor\frac{r}{10^{i}}\rfloor-\lfloor\frac{l}{10^{i}}\rfloor\)
- 按位考虑
G. Gift Set
LG 题解区的 \(O(1)\) 做法:
令 \(x\le y,a\le b\),那么答案一定是选若干个 \((a,b)\),然后尽可能选 \((a+b,b+a)\)(选两次,分别为 \((a,b),(b,a)\))
显然我们想让选完 \((a,b)\) 后 \(x,y\) 尽量接近(否则选 \((a,b),(b,a)\) 时会被浪费),那么选 \((a,b)\) 的次数为 \(\lfloor\frac{y-x}{b-a}\rfloor\),为避免特判,再算一下选 \(\lfloor\frac{y-x}{b-a}\rfloor+1\) 的答案
需要特判 \(a=b\)
- 考虑等价情况/条件
CF705
E. Enormous XOR
大型分类讨论
- \(l\) 最高位为 \(0\) :答案为 \(2^{n+1}-1\)。取 \([2^{n}-1,2^{n}]\) 即可
- \(r\) 为奇数:答案为 \(r\)。
证明:归纳法。- 左端点 \(\le r-2\):
- 右端点 \(\le r-2\):答案最大为 \(r-2\)
- 右端点 \(=r-1\):如果答案 \(>r\),则一定存在一位使得该位前 \(ans\) 与 \(r\) 相同,该位 \(r\) 为 \(0\) 且 \(ans\) 为 \(1\)。需使 \([l,r-1]\) 中该位出现奇数个 \(1\),设最后一次出现 \(1\) 为 \(mid\),则 \([l,mid],[mid+1,r]\) 中各有奇数个数(\(mid\) 在该位后都是 \(1\),\(r-1\) 为偶数,可以看官方题解的图),总长为偶数,因此 \(ans\) 的最高为为 \(0\),矛盾
- 右端点 \(=r\):答案为右端点 \(\le r-2\) 的某个区间异或上 \(r-1\oplus r=1\),最大为 \(r+1\)
- 左端点 \(>r-2\):显然为 \(r\)
- 左端点 \(\le r-2\):
- \(r\) 为偶数:
- \(l\le r-2\):答案为 \(r+1\),由 \([r-2,r]\) 取到(\([l,r+1]\) 的答案为 \(r+1\),因此 \([l,r]\) 的答案不会更大)
- \(l>r-2\):显然为 \(r\)
与官方题解的证明顺序不同,官方题解的略乱,但符合思考顺序
- 打表,通过部分规律深入思考
- 不要怕分类讨论,但要注意时间
- 小数据测全(测了 \(l=0,r=1\) 没测 \(l=r=0\))
F. Enchanted Matrix
行列独立,关键在于求最小循环节/最大循环节数
LG 题解区做法:
最大循环节数一定是 \(n\) 的约数,依次考虑 \(n\) 的质因子 \(p\)。设当前循环节数为 \(k\),那么只需要询问前 \(\frac{n}{k}\) 列是否能分成 \(p\) 节,比较显然的想法是询问 \([1,p-1],[2,p]\) 是否相等,但本题要求矩形不交
- \(p=2\):直接询问即可
- \(p>2\):\(p\) 为质数,因此一定为奇数。可以考虑设中间变量,分别比较 \([1,\lfloor\frac{p}{2}\rfloor],[\lfloor\frac{p}{2}\rfloor+1,p-1]\) 和 \([1,\lfloor\frac{p}{2}\rfloor],[\lfloor\frac{p}{2}\rfloor+2,p]\),若都相等则合法
CF702 (Div.3)
CF701
E. Move and Swap
确实比 F 难。
考虑 DP。首先蓝点与红点一定在同一层,且由于蓝点可以走到下一层任一点,因此只需要记录红点位置即可刻画出当前状态,设 \(f[u]\) 为红点在 \(u\) 时的最大值,转移时考虑是否交换:
- 不交换:红点直接从父亲走下来,蓝点走到当前层权值最大/最小的点
- 交换:蓝点变到 \(u\),红点在这层任选,即为 \(f[fa[v]]+|a[u]-a[v]|\),拆开绝对值得到 \(\max(\max\{f[fa[v]]-a[v]\}+a[u],\max\{f[fa[v]]+a[v]\}-a[u])\)
- 从限制多/状态少的入手
- \(|a-b|=\max(a-b,b-a)\)
F. Copy or Prefix Sum
CF700
E. Continuous City
显然要从二进制入手,但思考&实现细节都很多。也许可以先忽略点编号随便连边,然后拓扑排序?
- 通过连一条 \(l-1\) 的边可以把值域平移到 \([1,r-l+1]\)
- 先解决 \(r=2^{k}\) 的情况在尝试以此为基础扩展