傳送門
第一步轉換:求恰好為 k 的轉換成 ≤
k\le k
≤k的減去 ≤k−
1\le k-1
≤k−1
的考慮 dpdp
dp,令 fif_
fi 表示寬度為 i
ii 的答案
列舉第乙個斷點到i
ii 的長度,fi=
∑j=0
i−1f
i−j−
1∗gj
∗(1−
p)
f_i=\sum_^f_*g_j*(1-p)
fi=∑j
=0i−
1fi
−j−1
∗gj
∗(1
−p)g
ig_i
gi 表示最後一排全部安全,面積 ≤
k\le k
≤k的概率
g
gg 好像不是很好求,考慮加上高度一維,dpi
,j
dp_dp
i,j
表示底下寬度為i
ii,恰好在 j+1
j+1j+
1 行出現了不安全的概率
那麼 gi=
∑j=1
dpi,
jg_i=\sum_dp_
gi=∑j
=1d
pi,j
考慮 dpdp
dp的轉移
套路:列舉第乙個不安全的位置,它前面不安全的必須全部》
j>j
>
j,後面 ≥
j\ge j
≥jd pi
,j=p
j(1−
p)∑l
=1i∑
x>jd
pl−1
,x∗∑
x≥jd
pi−l
,x
dp_=p^j(1-p)\sum_^ \sum_dp_*\sum_dp_
dpi,j
=pj(
1−p)
∑l=1
i∑x
>j
dpl−
1,x
∗∑x≥
jdp
i−l,
x有用的狀態只有 klo
g(k)
klog(k)
klog(k
) 個,字首和優化轉移
f i=
gi+∑
j=1i
fi−j
gj−1
(1−p
)f_i=g_i+\sum_^if_g_(1-p)
fi=gi
+∑j
=1i
fi−j
gj−
1(1
−p)然後發現 j
jj 的下屆其實是 i−k
−1
i-k-1
i−k−
1,然後就可以線性遞推了,k
2k^2
k2暴力乘
複雜度 o(k
2log
(k)+
k2lo
g(n)
)o(k^2log(k)+k^2log(n))
o(k2lo
g(k)
+k2l
og(n
))
#include#define n 1005
using namespace std;
#define cs const
cs int mod = 998244353;
int add(int a, int b)
int mul(int a, int b)
int power(int a, int b)
void add(int &a, int b)
void mul(int &a, int b)
int n, k, x, y, q, pw[n];
int dp[n][n], f[n], g[n];
int p[n], a[n], b[n], tmp[n << 1];
void mul(int *a, int *b, int *c, int k)
for(int i = 0; i < k; i++) c[i] = tmp[i];
}int solve(int k)
}for
(int i = 0; i <= k; i++) g[i + 1] = mul
(dp[i][1], q), f[i] = dp[i][1];
for(int i = 1; i <= k; i++)
for(int j = 1, l = min
(i, k + 1)
; j <= l; j++)
add(f[i], mul
(f[i - j], g[j]));
memset
(p, 0, sizeof
(p))
;memset
(a, 0, sizeof
(a))
;memset
(b, 0, sizeof
(b))
; p[++k] = 1;
for(int i = 0; i < k; i++) p[i] = mod - g[k - i];
a[0] = b[1] = 1;
for(int i = n; i; i >>= 1, mul
(b, b, b, k))if
(i & 1)
mul(a, b, a, k)
; int ans = 0;
for(int i = 0; i < k; i++)
add(ans, mul
(a[i], f[i]));
return ans;
}int main()
NOI2017 蚯蚓排隊
嘟嘟嘟 現在看來這道題還不是特別難。別一看到字串就想sam 看到 k 很小,所以我們可以搞乙個單次修改複雜度跟 k 有關的演算法。能想到,每一次斷開或鏈結,最多隻會影響 k 2 個長度為 k 的區間。所以我們開乙個雜湊表,每一次拼接時就往雜湊表裡加入 k 2 個新的雜湊值,斷鏈的時候就把這些雜湊值減...
NOI2017蚯蚓排隊
原題鏈結 發現 k 50 在插入和刪除時最多會影響不超過 k2 個串,用鍊錶實現插入和刪除,然後只需用雜湊表維護每個長度不超過k的串的出現次數,雜湊的話可以先用比較大的範圍的值處理衝突,再對映到1e8的桶裡統計。考慮複雜度。首先在刪除時由於保證了 c 1000 所以這部分複雜度是o ck2 的。插入...
NOI2017醬油記(偽)
好吧其實是因為菜沒拿到名額才去打同步賽的。day1 拿到題面 1.不存在的 2.tan 90 3.辣雞吉利 臥槽,全是假題。此時skydec在裙上說第三道用dp騙分。於是我就愉快的擼了乙個小時擼出來了。然後一看t2,好像可以雜湊呀 然後就愉快的花了乙個小時碼碼碼 半個小時之後調完了。然後看第一道。還...