E. Number of Components
解法:
- d p [ i ] dp[i] dp[i] 维护从节点 1 1 1到 i i i为止的 ∑ ∑ f ( l , r ) \sum\sum f(l,r) ∑∑f(l,r)值。
- 那么有
d
p
dp
dp转移方程:
d p [ i ] = { d p [ i − 1 ] + ( v a l [ i ] − v a l [ i − 1 ] ) ∗ ( n − v a l [ i ] + 1 ) if v a l [ i ] > v a l [ i − 1 ] d p [ i − 1 ] + ( v a l [ i − 1 ] − v a l [ i ] ) ∗ v a l [ i ] if v a l [ i ] < = v a l [ i − 1 ] dp[i] = \begin{cases} dp[i-1] + (val[i] - val[i-1]) * (n - val[i] + 1) & \text{if $val[i] > val[i-1]$} \\ dp[i-1] + (val[i-1] - val[i]) * val[i] & \text{if $val[i] <= val[i-1]$} \\ \end{cases} dp[i]={dp[i−1]+(val[i]−val[i−1])∗(n−val[i]+1)dp[i−1]+(val[i−1]−val[i])∗val[i]if val[i]>val[i−1]if val[i]<=val[i−1]
复杂度: O ( n ) O(n) O(n)
F. Sonya and Informatics
解法:
- 假设有 z e r o zero zero个 0 0 0, o n e one one个 1 1 1
- 维护 d p [ i ] [ j ] dp[i][j] dp[i][j], j j j步后前 z e r o zero zero位有 i i i位是 0 0 0的交换方法。
- 转移方程:
d p [ i ] [ j ] = d p [ i − 1 ] [ j ] ∗ i ∗ ( o n e − ( z e r o − i ) ) + d p [ i + 1 ] [ j ] ∗ ( z e r o − i ) ∗ ( z e r o − i ) + d p [ i ] [ j ] ∗ ( ( z e r o − 1 ) ∗ z e r o / 2 + ( o n e − 1 ) ∗ o n e / 2 + i ∗ ( z e r o − i ) + ( z e r o − i ) ∗ ( o n e − ( z e r o − i ) ) ) dp[i][j] = dp[i-1][j] * i * (one - (zero - i)) \\ + dp[i+1][j]*(zero - i) * (zero - i) \\ + dp[i][j]*((zero-1)*zero/2+(one-1)*one/2+i*(zero-i)+(zero-i)*(one-(zero-i))) dp[i][j]=dp[i−1][j]∗i∗(one−(zero−i))+dp[i+1][j]∗(zero−i)∗(zero−i)+dp[i][j]∗((zero−1)∗zero/2+(one−1)∗one/2+i∗(zero−i)+(zero−i)∗(one−(zero−i))) - 用矩阵快速幂维护转移方程
- 需要知道: P Q m o d p = P / g c d ( P , Q ) Q / g c d ( P , Q ) m o d p \frac{P}{Q} \ mod \ p=\frac{P/gcd(P,Q)}{Q/gcd(P,Q)}\ mod \ p QP mod p=Q/gcd(P,Q)P/gcd(P,Q) mod p所以不需要考虑约分 m o d mod mod的问题