B.Reverse and Compare
以每个位置和每个位置之间为对称看,答案=不相同字符对数+1。
C.Fountain Walk
扇形环可以使得答案减少 20 − 5 π 20-5\pi 20−5π,半圆环使得答案增加 10 π − 20 10\pi-20 10π−20,但绕路去走扇形环绝对不优。
所有在起终点之间按离散化后的 x x x值为下标,求解LIS。
当每行或者每列都有障碍且构成一整个LIS时,不得不走一个半圆环。
*D.Shift and Flip
∣ A ∣ , ∣ B ∣ ≤ 2000 |A|,|B|\leq 2000 ∣A∣,∣B∣≤2000,明示枚举最终循环右移的位数。(套路)
设最终
∣
A
∣
|A|
∣A∣循环右移了
k
(
−
∣
A
∣
2
<
k
≤
∣
A
∣
2
)
k(-\frac {|A|}2<k\leq \frac {|A|}{2})
k(−2∣A∣<k≤2∣A∣)位,则
A
′
[
i
]
=
B
[
i
+
k
]
A'[i]=B[i+k]
A′[i]=B[i+k],即哪些位需要改变。
(
k
<
0
k<0
k<0的情况直接把
A
,
B
A,B
A,B翻转转成
−
k
-k
−k)
设在操作过程中最大右移 m x ( x ≥ k ) mx(x\geq k) mx(x≥k)位,最小右移 m n ( m n ≤ 0 ) mn(mn\leq 0) mn(mn≤0)位,设每个需要改变的位置 x x x在原位时左侧离它最近的 B i = 1 B_i=1 Bi=1的距离为 l x l_x lx,右侧离它最近的 B i = 1 B_i=1 Bi=1的位置距离为 r x r_x rx
答案就是求解最小的
m
x
+
m
n
mx+mn
mx+mn满足对于每个需要改变的位置
x
x
x,
l
x
≤
−
m
n
l_x\leq -mn
lx≤−mn或
r
x
≤
m
x
r_x\leq mx
rx≤mx。
按
l
l
l排序后扫一下即可。
*E.Shuffle and Swap
DP做法 O ( n 2 ) O(n^2) O(n2):
把每个位置看做点,并将点分类:
- A i = B i = 1 A_i=B_i=1 Ai=Bi=1的点为公共点。 s w a p ( A a k , A b k ) ( a k = i ) swap(A_{a_k},A_{b_k})(a_k=i) swap(Aak,Abk)(ak=i)后,还有其他位置能把 i i i的 1 1 1填回来
- A i = 1 , B i = 0 A_i=1,B_i=0 Ai=1,Bi=0的点为非公共点。 A i A_i Ai换走后,不能有 1 1 1填回来
- A i = 0 , B i = 1 A_i=0,B_i=1 Ai=0,Bi=1的点为反非公共点。必须有 1 1 1填回来。
一个合法解的构图( a i a_i ai向 b i b_i bi连边):一些公共点组成的环+一些起点为非公共点,中间全是公共点,终点为反非公共点的链。
环不好算,可以
D
P
DP
DP处理出链的信息,枚举有多少个公共点在链上:
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示
i
i
i个公共点,
j
j
j个(反)非公共点组成
j
j
j条链的方案数,转移
d p [ i ] [ j ] = d p [ i − 1 ] [ j ] × i × j + d p [ i ] [ j − 1 ] × j × j dp[i][j]=dp[i-1][j]\times i\times j+dp[i][j-1]\times j\times j dp[i][j]=dp[i−1][j]×i×j+dp[i][j−1]×j×j
前一个系数 i / j i/j i/j表示新赋的标号,后一个系数 j / j j/j j/j表示位置
设 x , y x,y x,y分别为公共点,非公共点的个数,则
a n s = ∑ i = 0 x d p [ i ] [ y ] ( ( x − i ) ! ) 2 ( x i ) ( x + y x − i ) ans=\sum\limits_{i=0}^x dp[i][y]((x-i)!)^2\dbinom{x}{i}\dbinom{x+y}{x-i} ans=i=0∑xdp[i][y]((x−i)!)2(ix)(x−ix+y)
实际复杂度 ( n 2 ) 2 = 500 0 2 (\dfrac{n}{2})^2=5000^2 (2n)2=50002
NTT+快速幂:
模数明示NTT。
题解
(大概是转成期望?)
*F.Yes or No
STOwxh010910
妙到不行!
首先设 n ≥ m n\geq m n≥m。
d p [ n ] [ m ] dp[n][m] dp[n][m]转成网格图就变成了点 ( n , m ) (n,m) (n,m)到点 ( 0 , 0 ) (0,0) (0,0)中的期望贡献。
画一条 y = x y=x y=x的斜线,先不考虑从斜线上出发的贡献:
- 在 y = x y=x y=x之上时向下走有1的贡献;在 y = x y=x y=x之下时向左走有1的贡献。
- 所有不从斜线出发的步的总贡献 = n =n =n(每段拆开加起来就是 n n n)
发现从斜线上出发的步的贡献一定为 1 2 \frac 12 21
枚举对角线上点,它的贡献就是 经 过 该 点 的 路 径 数 总 路 径 数 × 1 2 \dfrac{经过该点的路径数}{总路径数}\times \dfrac 12 总路径数经过该点的路径数×21