前言
年代久远的一套CF,然而vp时仍旧只能写出AB两题。这套题思维难度其实不大,而且就连E题数据结构题都没到百行,我深感自己能力欠缺。
A
key
- 差分
题意
有一个长度为n的序列,m种操作可以给一个区间加上一个值,k次每次执行下标连续的一段操作,求最终序列。
思路
对每个操作做几次和每个元素加多少各做一次差分。 O ( n ) O(n) O(n)。
B
key
- floyd
题意
一张图,按给定序列把每个点都去掉,求每次操作后剩下点两两之间的最短路权值之和。
思路
倒着做,也就是每次加入一个点(和[JSOI2008]星球大战类似),以加入点为中间点floyd更新。 O ( n 3 ) O(n^3) O(n3)。
C
key
- DP
题意
用一条船让所有人过河,船有限重,人只有50或100千克两种,求最小开船次数和方案数。
思路
一开始想直接爆搜,不行胡乱加了个记忆化,然后判断最小开船次数的函数写挂了。
不如直接DP更直观,
f
[
i
]
[
j
]
[
k
]
f[i][j][k]
f[i][j][k]表示已经开了
i
i
i次,当前岸边有
j
j
j个50千克,
k
k
k个100千克的方案数。
i
i
i最大是
4
n
4n
4n,所以复杂度
O
(
n
5
)
O(n^5)
O(n5)不到一点O(能过)。
D
key
- DP
- 前缀和优化
题意
题意有点难懂。翻译来自另一位大佬的博客。
n ∗ m n*m n∗m的矩阵,每个格子不是黑的就是白的,要求满足下面条件的染色方案数:
1.存在区间 [ l , r ] ( 1 ≤ l ≤ r ≤ n ) [l,r](1 \leq l \leq r \leq n) [l,r](1≤l≤r≤n)满足,第 l l l行到第 r r r行每行恰两个黑色格子,其他行全部都是白色格子
2.存在 t ( l ≤ t ≤ r ) t(l \leq t \leq r) t(l≤t≤r)满足,对于任意 i , j ( l ≤ i ≤ j ≤ t ) i,j(l \leq i \leq j \leq t) i,j(l≤i≤j≤t),第 i i i行两个黑色格子所在行形成的区间被第 j j j行两个黑色格子所在行形成区间包括,同样的,对于任意 i , j ( t ≤ i ≤ j ≤ r ) i,j(t \leq i \leq j \leq r) i,j(t≤i≤j≤r),第 j j j行两个黑色格子所在行形成的区间被第 i i i行两个黑色格子所在行形成区间包括
思路
首先 f [ i ] [ j ] f[i][j] f[i][j]表示有 i i i行,第 i i i行区间长度 j j j的方案数。那么
f [ i ] [ j ] = 1 + ∑ k = 2 j f [ i − 1 ] [ k ] ∗ ( j − k + 1 ) f[i][j]=1+\sum_{k=2}^{j}f[i-1][k]*(j-k+1) f[i][j]=1+k=2∑jf[i−1][k]∗(j−k+1)
O ( n 3 ) O(n^3) O(n3)?可以拆成两部分。
f [ i ] [ j ] = 1 + ∑ k = 2 j f [ i − 1 ] [ k ] ∗ j + ∑ k = 2 j f [ i − 1 ] [ k ] ∗ ( 1 − k ) f[i][j]=1+\sum_{k=2}^{j}f[i-1][k]*j+\sum_{k=2}^{j}f[i-1][k]*(1-k) f[i][j]=1+k=2∑jf[i−1][k]∗j+k=2∑jf[i−1][k]∗(1−k)
预处理前缀和 f [ i ] [ j ] f[i][j] f[i][j]和 g [ i ] [ j ] g[i][j] g[i][j],就变成 O ( n 2 ) O(n^2) O(n2)了。看似简单的优化却很好用。
g [ i ] [ j ] = ∑ k = 2 j f [ i ] [ k ] , h [ i ] [ j ] = ∑ k = 2 j f [ i ] [ k ] ∗ ( 1 − k ) g[i][j]=\sum_{k=2}^{j}f[i][k],h[i][j]=\sum_{k=2}^{j}f[i][k]*(1-k) g[i][j]=k=2∑jf[i][k],h[i][j]=k=2∑jf[i][k]∗(1−k)
E
key
- 线段树
题意
求区间内所有点两两间的距离之和,支持修改。
思路
线段树维护三个东西,区间内点的数量,区间点权之和,区间所有点两两距离。
答案可以由左边距离和,右边距离,加上左右两部分之间作差得到。
值域 1 0 9 10^9 109,可以离散或者动态开点,显然后者更方便。
后记
于是很快就写完了,甚至怀疑为什么被 C C C题续到怀疑人生。最近几场CF也濒临掉分。一定要多练习。
想要代码可以去Status找 A m o r p h o p h a l l u s Amorphophallus Amorphophallus。跑的挺快的。