以每个位置和每个位置之间为对称看,答案=不相同字符对数+1。
扇形环可以使得答案减少 20 − 5 π 20-5\pi 20−5π,半圆环使得答案增加 10 π − 20 10\pi-20 10π−20,但绕路去走扇形环绝对不优。
所有在起终点之间按离散化后的 x x x值为下标,求解LIS。
当每行或者每列都有障碍且构成一整个LIS时,不得不走一个半圆环。
∣ 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排序后扫一下即可。
DP做法 O ( n 2 ) O(n^2) O(n2):
把每个位置看做点,并将点分类:
一个合法解的构图( 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。
题解
(大概是转成期望?)
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的斜线,先不考虑从斜线上出发的贡献:
发现从斜线上出发的步的贡献一定为 1 2 \frac 12 21
枚举对角线上点,它的贡献就是 经 过 该 点 的 路 径 数 总 路 径 数 × 1 2 \dfrac{经过该点的路径数}{总路径数}\times \dfrac 12 总路径数经过该点的路径数×21