A
- 首先,插入的字符必须和左右两边的字符都不一样
- 其次,对于插入位置的选择,显然最好插在两个一样的字符中间,如果没有一样的字符,插在最前面即可
B
- 观察样例发现题目中要求的位置就在样例中
- 手玩一下,尝试改变样例里那个形状,发现改变任何一个格子都不满足题意,所以得出结论:题目要求的位置当且仅当六个格子形如
...
*.*
C
- 首先,左括号为1,右括号为 -1,合法括号串显然满足前缀和非负
- 在奇数位置上,前缀和总是二的倍数
- 如果要尽量缩小匹配括号之间的距离,显然能早放右括号就早放右括号
- 如果某个奇数位置的前缀和是 0,显然只能放左括号
- 否则,一定会放右括号,这样做一定没有后效性:因为如果放的话,前缀和最少是 2,一定可以支持连续放两个右括号,然后就到下一个奇数位置了
D
- 注意到 \(u\) 可以取到的最大值与子树内的最小值有关,考虑树形 DP
- 设 \(f_u\) 表示 以 \(u\) 为根的子树内最小值的最大值
- 容易列出转移:\(f_u=min(min_{v\in u}(f_v),\frac {min_{v\in u}(f_v)-a[u]}{2}+a[u])\)
- 对于叶子:\(f_u=a_u\)
- 对于根:\(f_u=a_u+min_{v\in u}(f_v)\)
E
- 容易发现:对于一个怪物,k 越大,越容易蘸豆,k 越小,越不容易蘸豆
- 观察询问的形式,大胆猜想回复询问是 \(O(1)\) 的;而我们对于每个怪物 \(i\),要计算出:k 至少为多少才能与这个怪物蘸豆
- 考虑二分:设当前二分的值为 \(k\),则不与当前怪物蘸豆的充要条件是:\(k\times a_i<=在第 i 个怪物之前蘸豆的总次数\)
- 注意到 \(在第i个怪物之前的蘸豆总次数\) 难以快速求出,但注意到,我们在计算到 \(i\) 时,已经算出了与前 \(i-1\) 个怪蘸豆所需的最小 \(k\),于是我们可以使用树状数组快速求出 \(在第i个怪物之前的蘸豆总次数\)
- 时间复杂度 \(O(n\log^2{n})\)
F
- 首先,你需要一点注意力,注意到:
- 所有操作可逆
- 所有筹码最后都可以变到第一个位置
- 设 \(v_i\) 表示第 \(i\) 个位置的一个筹码的价值,则 \(v_i\) 是斐波那契数列
- 显然对于一种若干筹码的放置方式,有且一种总价值和与之对应,即有且仅有一种 \(m\) 的值与其对应
- 注意到 \(x\) 很小,考虑极端情况,在 \(x=10\) 的地方放了 1000 个筹码,这时取到最大理论价值:\(v_{10}\times 1000\leq v_{25}\)
也就是说,我们最多用到 \(x=25\) 这个位置
- 注意到最大理论价值最多只有 55000 量级,我们考虑统计答案的方式:枚举每一个价值和 \(V\),如果这个价值对应的最少筹码表示就是 \(m\),则累加“用 \(n\) 个筹码摆出 \(V\) 的价值的方案数”
- 现在的问题是,如何求 \(用n个筹码摆出V的价值的方案数\):显然考虑 DP
- 设 \(f_{x,i,j}\) 表示用前 \(x\) 个位置,摆了 \(i\) 个筹码,摆出 \(j\) 的价值的方案数
- 初状:\(f_{i,0,0}=1\)
- 转移:\(f_{x,i,j}=f_{x-1,i,j}+f_{x,i-1,j-v_x}\)
- 优化:显然可以滚掉第一维
posted @
2024-11-08 21:06
yeyou26
阅读(
47)
评论()
编辑
收藏
举报