学习了 2022 年集训队论文 《浅谈与 Lyndon 理论有关的字符串组合问题》
写得很好,像我这样的字符串小白也能看懂

Lyndon 分解

  • 若字符串 w w w 小于它的每一个真后缀,则称 w w w 是 Lyndon 串。
  • 若字符串 w w w 是 Lyndon 串,则 w k w ′ w^kw' wkw′ 是近似 Lyndon 串,其中 w ′ w' w′ 是 w w w 的前缀。

串 w w w 可以分解位 w 1 c 1 … w k c k w_1^{c_1}\dots w_{k}^{c_k} w1c1​​…wkck​​,其中 w 1 > ⋯ > w k w_1>\dots>w_k w1​>⋯>wk​。

最小后缀族:对于串 w w w 的后缀 w ′ w' w′,若存在 u u u 使得任意后缀 w ′ ′ w'' w′′ 满足 w ′ u < w ′ ′ u w'u<w''u w′u<w′′u,则 w ′ w' w′ 是 w w w 的一个有效后缀,有效后缀的集合称为 w w w 的最小后缀族,记为 S S ( w ) SS(w) SS(w)

  • 若 u 2 v , u v , v u^2v,uv,v u2v,uv,v 都是 w w w 的后缀,则 u v uv uv 不是有效后缀。
  • 若 u , v ∈ S S ( w ) , ∣ u ∣ < ∣ v ∣ u,v\in SS(w),|u|<|v| u,v∈SS(w),∣u∣<∣v∣,则 u u u 是 v v v 的 b o r d e r border border,且 2 ∣ u ∣ ≤ ∣ v ∣ 2|u|\le |v| 2∣u∣≤∣v∣。
  • 有效后缀形如 s i = w i c i … w k c k s_i=w_i^{c_i}\dots w_k^{c_k} si​=wici​​…wkck​​
  • s i + 1 s_{i+1} si+1​ 是 s i s_i si​ 的前缀的充要条件是 i ≤ λ i\le \lambda i≤λ,其中 s λ s_{\lambda} sλ​ 是对 w w w 进行 Duval 算法时第一次比较完字符串末尾时的近似 Lyndon 后缀。(因为 w i x s i + 1 w_i^xs_{i+1} wix​si+1​ 是近似 Lyndon 后缀,所以 s i + 1 s_{i+1} si+1​ 是 w i w_{i} wi​ 的前缀)

后接 v v v 的最小后缀:

  • 给定 w , v w,v w,v,求 w w w 的后缀 u u u,使得 u v uv uv 最小,记为 M i n s u f ( w , v ) Minsuf(w, v) Minsuf(w,v)

由于 u u u 是 s λ , … , s k s_{\lambda},\dots,s_k sλ​,…,sk​ 之一,另 w i = s i + 1 + y i w_i=s_{i+1}+y_i wi​=si+1​+yi​, x i = y i + s i + 1 x_i=y_i+s_{i+1} xi​=yi​+si+1​,则有 s i = s i + 1 + x i c i s_i=s_{i+1}+x_i^{c_i} si​=si+1​+xici​​。

  • ∀ i ∈ [ λ , k − 1 ] , y i > x i + 1 ∞ \forall i\in [\lambda,k-1],y_i>x_{i+1}^{\infty} ∀i∈[λ,k−1],yi​>xi+1∞​,即证 s i + 1 y i > s i + 1 x i + 1 ∞ s_{i+1}y_i>s_{i+1}x_{i+1}^{\infty} si+1​yi​>si+1​xi+1∞​,即 w i > w i + 1 ∞ s i + 2 w_i>w_{i+1}^{\infty}s_{i+2} wi​>wi+1∞​si+2​,又有 w i > w i + 1 ∞ w_i>w_{i+1}^{\infty} wi​>wi+1∞​。
  • ∀ i ∈ [ λ , k − 1 ] , x i ∞ > x i + 1 ∞ \forall i\in [\lambda,k-1],x_i^{\infty}>x_{i+1}^{\infty} ∀i∈[λ,k−1],xi∞​>xi+1∞​

考虑比较 s i v s_iv si​v 和 s i + 1 v s_{i+1}v si+1​v 的大小,发现这等价与比较 x i c i v x_i^{c_i}v xici​​v 和 v v v 的大小,这等价于比较 x i ∞ x_i^{\infty} xi∞​ 和 v v v 的大小,故可以二分找到一个 i i i 使得 x i ∞ > v > x i + 1 ∞ x_i^{\infty}>v>x_{i+1}^{\infty} xi∞​>v>xi+1∞​,此时 M i n s u f ( w , v ) = s i + 1 v Minsuf(w,v)=s_{i+1}v Minsuf(w,v)=si+1​v。

例:JSOI 2019 节日庆典,求每个前缀的最小表示。
线性做法:考虑当前串可以表示成 u w k w ′ uw^kw' uwkw′,那么只需要考虑最小表示开头为 w k w ′ w^kw' wkw′ 或开头在 w ′ w' w′ 里面的情况,在 w ′ w' w′ 里面时发现去掉最后 ∣ w ∣ |w| ∣w∣ 个字符即为 u w k − 1 w ′ uw^{k-1}w' uwk−1w′ 的循环表示,是之前已经求出的答案。

Runs

Runs 的定义和 Runs 定理

定义:本源串, k k k 次方串,平方串,本源 k k k 次方串。
Runs:对于字符串 S S S,若其一个子串 S [ i , j ] S[i,j] S[i,j] 具有最小周期 p p p,满足 2 p ≤ j − i + 1 2p\le j-i+1 2p≤j−i+1,且 S i − 1 ≠ S i + p − 1 , S j + 1 ≠ S j + 1 − p S_{i-1}\neq S_{i+p-1},S_{j+1}\neq S_{j+1-p} Si−1​​=Si+p−1​,Sj+1​​=Sj+1−p​,则 r = ( i , j , p ) r=(i,j,p) r=(i,j,p) 构成 S S S 的一个 run, e r = j − i + 1 p e_r=\frac{j-i+1}{p} er​=pj−i+1​ 为它的指数, S S S 的所有 runs 的集合记为 R u n s ( S ) Runs(S) Runs(S)。
Runs 为研究幂串结构提供了方法,容易发现我们定义的 runs 满足 run 里面至少有一个平方串。

  • 周期相同的两个 runs 的交长度 < p <p <p。
  • 任何一个 run r = ( i , j , p ) r=(i,j,p) r=(i,j,p) 可以导出 j − i + 1 − 2 p j-i+1-2p j−i+1−2p 个本源平方串,每个本源平方串由唯一一个 run 导出

下面,我们将证明两个重要的命题:
Runs 定理:记 ρ ( n ) \rho(n) ρ(n) 和 σ ( n ) \sigma(n) σ(n) 表示长为 n n n 的串的 runs 个数以及 runs 指数和的最大值,有 ρ ( n ) < n , σ ( n ) < 3 n \rho(n)<n,\sigma(n)<3n ρ(n)<n,σ(n)<3n。

记 < 0 , < 1 <_0,<_1 <0​,<1​ 为字符集上两种相反的序。

  • 定义 Lyndon 根:对于一个 run r = ( i , j , p ) r=(i,j,p) r=(i,j,p),若在字典序 < < < 下其长为 p p p 的子串 S [ u , u + p − 1 ] S[u,u+p-1] S[u,u+p−1] 为 Lyndon 串,则称 S [ u , u + p − 1 ] S[u,u+p-1] S[u,u+p−1] 是 r r r 关于 < < < 的一个 Lyndon 根。
  • 定义 Lyndon 数组:定义 l t ( i ) l_t(i) lt​(i) 表示在 < t <_t <t​ 下左端点为 i i i 的最长 Lyndon 串的右端点,将 l t ( i ) l_t(i) lt​(i) 成为 S S S 的 Lyndon 数组。
  • 性质: l 0 ( i ) , l 1 ( i ) l_0(i),l_1(i) l0​(i),l1​(i) 恰有一个为 i i i,证明略。
  • 性质:对于 run r = ( i , j , p ) r=(i,j,p) r=(i,j,p),设 S j + 1 < t S j + 1 − p S_{j+1}<_tS_{j+1-p} Sj+1​<t​Sj+1−p​,那么其任意 Lyndon 根 S [ u , u + p − 1 ] S[u,u+p-1] S[u,u+p−1] 有 l t ( u ) = u + p − 1 l_t(u)=u+p-1 lt​(u)=u+p−1。证明:对于 S [ u , v ] , u + p − 1 < v ≤ j S[u,v],u+p-1<v\le j S[u,v],u+p−1<v≤j 满足其为 w k w ′ w^kw' wkw′,对于 v > j v>j v>j 显然不是 Lyndon 串。
  • 定义 Lyndon 根:若 run r = ( i , j , p ) r=(i,j,p) r=(i,j,p) 的 Lyndon 根 S [ u , u + p − 1 ] S[u,u+p-1] S[u,u+p−1] 满足 u > i u>i u>i,那么其为真 Lyndon 根。
  • 性质: S [ u , l 0 ( u ) ] , S [ u , l 1 ( u ) ] S[u,l_0(u)],S[u,l_1(u)] S[u,l0​(u)],S[u,l1​(u)] 不可能同时为两个 run 的 Lyndon 根。证明:设 l 0 ( u ) = u l_0(u)=u l0​(u)=u,则有 S u = S u − 1 + S u + p − 1 = S l 1 ( u ) S_u=S_{u-1}+S_{u+p-1}=S_{l_1(u)} Su​=Su−1​+Su+p−1​=Sl1​(u)​,故 S [ u , l 1 ( u ) ] S[u,l_1(u)] S[u,l1​(u)] 不是 Lyndon 串。
  • 性质:任意两个不同的 run 的真 Lyndon 根左端点集合不交。(由上一条得到)

设 B ( r ) B(r) B(r) 表示 run r r r 所有真 Lyndon 根的左端点集合,有任意 B ( r 1 ) ∩ B ( r 2 ) = ∅ B(r_1)\cap B(r_2)=\empty B(r1​)∩B(r2​)=∅,所以 ∑ r ∣ B ( r ) ∣ ≤ n − 1 \sum_r |B(r)|\le n-1 ∑r​∣B(r)∣≤n−1,又 B ( r ) ≥ 1 B(r)\ge 1 B(r)≥1,故 ∣ R u n s ( S ) ∣ ≤ n − 1 |Runs(S)|\le n-1 ∣Runs(S)∣≤n−1。
若 r = ( i , j , p ) r=(i,j,p) r=(i,j,p) 循环了 x x x 次,则真 Lyndon 根至少有 x − 1 x-1 x−1 个,故 ∣ B ( r ) ∣ > e r − 2 |B(r)|>e_r-2 ∣B(r)∣>er​−2, ∑ r ( e r − 2 ) ≤ n − 1 \sum_r(e_r-2)\le n-1 ∑r​(er​−2)≤n−1,故 ∑ r e r < 3 n \sum_r e_r<3n ∑r​er​<3n。

Runs 的求解方法

算法 1:枚举周期 p p p,用 NOI2016 优秀的拆分的做法解决。
算法 2:由于 runs 的 Lyndon 根一定形如 S [ i , l t ( i ) ] S[i,l_t(i)] S[i,lt​(i)],所以先求出 Lyndon 数组再进行扩展即可。求 Lyndon 数组可以考虑一种从后向前构造 Lyndon 分解的方法,即从后往前扫,维护一个单调栈,每次加入一个字符,检查能不能和栈顶的串合并。

幂串的结构

  • 性质:若 u 2 , v 2 , w 2 u^2,v^2,w^2 u2,v2,w2 是本源平方串,且 u 2 u^2 u2 是 v 2 v^2 v2 的前缀, v 2 v^2 v2 是 w 2 w^2 w2 的前缀,则 ∣ w ∣ ≥ ∣ u ∣ + ∣ v ∣ |w|\ge |u|+|v| ∣w∣≥∣u∣+∣v∣。

于是我们有结论:串 w w w 的本源平方前缀个数为 O ( log ⁡ ∣ w ∣ ) O(\log |w|) O(log∣w∣) 个。
串 w w w 的本源平方串个数为 O ( ∣ w ∣ log ⁡ ∣ w ∣ ) O(|w|\log |w|) O(∣w∣log∣w∣) 个,于是也有 ∑ r ( j − i + 1 − 2 p ) \sum_r (j-i+1-2p) ∑r​(j−i+1−2p) 为 O ( ∣ w ∣ log ⁡ ∣ w ∣ ) O(|w|\log |w|) O(∣w∣log∣w∣)。

  • 性质:字符串 w w w 的本质不同本源平方串个数为 O ( ∣ w ∣ ) O(|w|) O(∣w∣)。证明:考虑最后一次出现位置,假设一个左端点有 3 个 u , v , w u,v,w u,v,w,则有 2 ∣ u ∣ ≤ ∣ w ∣ 2|u|\le |w| 2∣u∣≤∣w∣,那么 u 2 u^2 u2 不是最后一次出现。

:ZJOI 2020 字符串,区间询问本质不同平方串。

  • 先忽略本质不同,考虑 run r = ( i , j , p ) r=(i,j,p) r=(i,j,p),其每个 S [ l , l + 2 k p − 1 ] S[l,l+2kp-1] S[l,l+2kp−1] 都可以作为一个贡献。将 ( l , l + 2 k p − 1 ) (l,l+2kp-1) (l,l+2kp−1) 看作一个点,那么对于一个 k k k,我们可以将操作看成斜线加,加的次数是 ∑ r j − i + 1 p \sum_r \frac{j-i+1}{p} ∑r​pj−i+1​,其为 O ( n ) O(n) O(n) 。
    下面考虑本质不同,对于两个相同子串 S [ i , i + 2 p − 1 ] , S [ j , j + 2 p − 1 ] S[i,i+2p-1],S[j,j+2p-1] S[i,i+2p−1],S[j,j+2p−1],我们在 ( i , j + 2 p − 1 ) (i,j+2p-1) (i,j+2p−1) 放一个权值为 − 1 -1 −1 的点即可。在一个 run 里面的同样只需要枚举 k k k 然后斜线减,否则就是和前面一个 run 里面的相同。从做到右扫 runs,我们只关注 run 里面第一次出现的平方串,容易发现其个数为 ∑ r ( j − i + 1 − 2 p ) ∼ O ( n log ⁡ n ) \sum_r (j-i+1-2p)\sim O(n\log n) ∑r​(j−i+1−2p)∼O(nlogn),故直接使用 hash,然后在平面上会添加 O ( n log ⁡ n ) O(n\log n) O(nlogn) 个点。时间复杂度 O ( n log ⁡ 2 n + q log ⁡ n ) O(n\log^2 n+q\log n) O(nlog2n+qlogn)。

Lyndon 树

对于一个 Lyndon 串 w w w,我们可以得到一个 2 ∣ w ∣ − 1 2|w|-1 2∣w∣−1 个结点的二叉树,每个结点代表一个子串(且也为 Lyndon 串),构建的方法为找到 w = u + v w=u+v w=u+v,其中 v v v 是 w w w 的最小后缀,然后 u , v u,v u,v 为 w w w 的两个儿子。

构建方法:从后向前,维护 [ i + 1 , n ] [i+1,n] [i+1,n] 组成的森林(每一个子树是一个 Lyndon 串),加入当前字符 S i S_i Si​,会合并栈顶的一些 Lyndon 串,将这些点串起来即可。

  • 性质:以 i i i 为左端点的最长 Lyndon 子串对应 Lyndon 树中以 i i i 为左端点的最大子树。(证明:建树的过程和求 Lyndon 数组相同)

  • 性质:若 S [ l , r ] S[l,r] S[l,r] 是 Lyndon 串,则 l , … , r l,\dots,r l,…,r 的 LCA 的子树的左端点为 l l l。

区间短周期查询:每次查询 S [ l , r ] S[l,r] S[l,r] 的最小周期,若最小周期大于一半则不用输出。

  • 这等价与查询是否有一个包含 [ l , r ] [l,r] [l,r] 且周期不超过 r − l + 1 2 \frac{r-l+1}{2} 2r−l+1​ 的 run。
    以 < 0 , < 1 <_0,<_1 <0​,<1​ 两种比较关系建 Lyndon 树,分别求出 l , … , ⌈ l + r 2 ⌉ l,\dots,\lceil \frac{l+r}{2}\rceil l,…,⌈2l+r​⌉ 的 LCA,检查以其右子树为 Lyndon 根的 runs。
    证明:我们只需要找到一个包含 m m m 的 Lyndon 根。 LCA 的右子树 x x x 满足条件,若其不为答案的 runs r = ( i , j , p ) r=(i,j,p) r=(i,j,p),那么我们知道 x x x 的右端点大于 j j j,但是 S j + 1 < S j + 1 − p S_{j+1}<S_{j+1-p} Sj+1​<Sj+1−p​,这与 x x x 的子树是 Lyndon 串矛盾。

Lyndon 串计数

  • 记 w ^ \hat w w^ 为 w w w 的最小表示,若 w ^ = w \hat w=w w^=w 则称 w w w 为 necklace。
  • 性质:每个 Lyndon 串都是 necklace,每个 necklace 可以写成 w k w^k wk 其中 w w w 是 Lyndon 串。

w ^ \hat w w^ 的求法:首先找到 u k = w u^k=w uk=w 然后求 u ^ \hat u u^,只需要对 u u uu uu 求 Lyndon 分解,然后找到最后一个在 [ 1 , ∣ u ∣ ] [1,|u|] [1,∣u∣] 中分解的地方 x x x,那么 u ^ = u [ x , ∣ u ∣ ] + u [ 1 , x − 1 ] \hat u=u[x,|u|]+u[1,x-1] u^=u[x,∣u∣]+u[1,x−1]。

求前驱 necklace:求长度等于 ∣ w ∣ |w| ∣w∣ 字典序 ≤ w \le w ≤w 的最大的 necklace。记作 P L ( w ) PL(w) PL(w)

  • P L ( w ) PL(w) PL(w) 形如 P r e ( w , i − 1 ) + P ( w i ) + z ∣ w ∣ − i Pre(w,i-1)+P(w_i)+z^{|w|-i} Pre(w,i−1)+P(wi​)+z∣w∣−i,其中 P ( c ) P(c) P(c) 表示比 c c c 小的最大字符,故我们有 ∣ w ∣ 2 |w|^2 ∣w∣2 的做法,即每次判断是不是 necklace。
    考虑优化判断的过程,只需要判断 P r e ( w , i − 1 ) + P ( w i ) Pre(w,i-1)+P(w_i) Pre(w,i−1)+P(wi​) 是不是近似 Lyndon 串即可,用一次 Duval 算法就可以解决。

Lyndon 串计数:
设 P ( n ) , L ( n ) P(n),L(n) P(n),L(n) 表示本源串和 Lyndon 串的数量,有 L ( n ) = 1 n P ( n ) L(n)=\frac 1n P(n) L(n)=n1​P(n),且 Σ n = ∑ d ∣ n P ( d ) \Sigma^n=\sum _{d\mid n}P(d) Σn=∑d∣n​P(d),那么 L ( n ) = 1 n ∑ d ∣ n μ ( n d ) Σ d L(n)=\frac 1n \sum_{d\mid n}\mu(\frac nd)\Sigma^d L(n)=n1​∑d∣n​μ(dn​)Σd。

Lyndon 串排名:
设 P ( d ) , P ′ ( d ) P(d),P'(d) P(d),P′(d) 表示满足 u ^ n / d ≤ w \hat u^{n/d}\le w u^n/d≤w 的任意串 u u u 的数量,以及本源串 u u u 的数量。
r a n k = 1 n P ′ ( n ) , P ( x ) = ∑ d ∣ x P ′ ( d ) → r a n k = 1 n ∑ d ∣ n μ ( n d ) × P ( d ) rank=\frac 1nP'(n),P(x)=\sum_{d\mid x}P'(d)\to rank=\frac 1n\sum_{d\mid n} \mu(\frac nd)\times P(d) rank=n1​P′(n),P(x)=∑d∣x​P′(d)→rank=n1​∑d∣n​μ(dn​)×P(d)。
容易发现 P ( d ) P(d) P(d) 等价与 u ^ ≤ P r e ( w , d ) \hat u\le Pre(w,d) u^≤Pre(w,d) 的任意串数量。
识别自动机: KMP 的改版,当转移字符等于 w i w_i wi​ 时,到 i + 1 i+1 i+1,小于 w i w_i wi​ 时到 n n n,否则到 0。

  • 性质: w w w 是 necklace, u ^ ≤ w , ∣ u ∣ = ∣ w ∣ = n \hat u\le w,|u|=|w|=n u^≤w,∣u∣=∣w∣=n 当且仅当 u 2 u^{2} u2 中存在一个不为 w w w 真前缀的子串 v v v 满足 v ≤ w v\le w v≤w。
  • 性质: 发现对于 necklace 的识别自动机,它和 KMP 自动机一样。

对于计算 P ( n ) P(n) P(n),我们只需要考虑不能转移到 n n n 的点有多少,我们会发现,考虑串 u ∞ u^{\infty} u∞ 对于充分打大的 j j j, j j j 转移到的点和 j + ∣ u ∣ j+|u| j+∣u∣ 转移到的是一样的。
我们定义 j ∣ u ∣ j|u| j∣u∣ 转移到的点 t t t 为这个串的起始点,现在就是要求环的数量。设 f j f_j fj​ 为长为 j j j 的环的数量,枚举第一个环 j j j,有 f i = ∑ j = 1 m i n ( n − 1 , i ) b j f i − j f_i=\sum_{j=1}^{min(n-1,i)} b_jf_{i-j} fi​=∑j=1min(n−1,i)​bj​fi−j​,其中 b j b_j bj​ 表示从这个点转移到 0 的边数。容易发现可以使用多项式求逆来解决。于此同时,答案为 ∑ i = 1 n − 1 i × b i × f n − i \sum_{i=1}^{n-1} i\times b_i\times f_{n-i} ∑i=1n−1​i×bi​×fn−i​。注意到也可以使用线性递推做到 O ( n log ⁡ n log ⁡ m ) O(n\log n\log m) O(nlognlogm) 的复杂度。

Run Run Run相关推荐

  1. linux dry run,dry run

    "The purpose of the dry run is to put yourself in a position that leverages everything positive ...

  2. git cz: Missing script: “test“ To see a list of scripts, run: npm run

    git cz报错 情况1: git cz cz-cli@4.2.4, cz-conventional-changelog@3.3.0? Select the type of change that y ...

  3. run as server和run as run java application

    运行一个Java程序时出现这个错误The requested resource is not available 平时运行Java web 程序时,一直都是点击整个项目,后面的run as serve ...

  4. run as server和run as run java application

    运行Java web 程序时,一直都是点击整个项目,后面的run as server,今天发现有些Java类可以后面有run as java application. 查了资料发现是因为有些Java类 ...

  5. Eclipse中run as run on server和run as java application

    一.run java application (作为Java应用程序运行)是运行 java main方法 run on server是启动一个web 应用服务器 二.两者的区别: Eclipse中可以 ...

  6. 为什么说,长跑和爬山能锻炼意志?因为要不停的run,run,run......

    长跑和爬山教会我们的是无论做什么都要坚持,教会我们的是生活的态度. 如果不能体会到这一点,那你长跑的意义就是纯粹的锻炼身体. 中国教育的最大败笔就是教会了人学习,却没教会人思考.

  7. Note that the development build is not optimized. To create a production build, run npm run bui

    我项目运行成功了,但是访问却出错了 localhost:8080 经过我查询,可能是这样的原因 是因为axios和node版本不兼容 用nvm换一个低版本的node 然后删除依赖 重新install ...

  8. Thread start()方法和run()方法的区别

    Thread start() 方法 ,是一个线程开始的方法 Thread run() 方法 ,就是一个普通的方法,可以理解为main方法里面的一个普通的方法 下面写一个demo 理解下 Thread ...

  9. Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)

    1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...

  10. linux run文件夹,Linux下运行run文件

    比如realplay.run 安装方法如下 chmod xrealplay.run ./realplay.run 然后他就会执行安装了,在过程中可能会要求你输入yes或no 安装完后就可以用了,chm ...

最新文章

  1. 百度搜索引擎广告SEM调用架构示意图
  2. [数据结构] 时间复杂度计算
  3. 利用freopen()函数和fc命令简化程序调试
  4. CodeForces - 1323D Present(思维+数学)
  5. 如何使用DotNet 2.0中的应用程序配置 Settings.settings
  6. python将ros下bag文件的所有topic解析为csv格式
  7. mockito_吸收Mockito的流利度
  8. 关于Apache Tomcat解决localhost was unable to start within 45 seconds
  9. 12个有趣的C语言面试题
  10. 实现一个简单的前端水印
  11. android支付平台,android移动支付
  12. (USB HID) Report Descriptor 理解
  13. HDU 5857 Median (推导)
  14. 英语词汇篇 - 词根词缀大全
  15. 微信小程序|基于小程序实现打卡功能
  16. FreeSWITCH实现在视频通话中某一方视频翻转
  17. OpenWrt TL-WR841N WAN口down问题
  18. Labview 版本控制
  19. A03-arcgis无法统计地块面积常见问题及解决方案
  20. scss动态生成类名、样式值

热门文章

  1. 刷屏的海底捞超级APP究竟是怎样与阿里云合作的
  2. linux 下线程池
  3. 如何维护一个1000 IP的免费代理池
  4. Android-小游戏
  5. Ubuntu/CentOS 磁盘分区扩展
  6. html鼠标键弹起事件,js鼠标按键事件和键盘按键事件用法实例汇总
  7. 物体长度测量---------C#+Emgucv
  8. GLSL 参考GIMP源码实现色彩平衡调节
  9. 大型圆弧怎么处理_这种大圆弧一次成型,回弹怎么计算?低公差
  10. 互动媒体技术——对十二个“一”的文艺创作作业进行文本分析、统计和可视化