SDOI2016 总结

文章目录

  • 4644【SDOI2016】储能表
  • 4645【SDOI2016】数字配对
  • 4647【SDOI2016】生成魔咒
  • 4648【SDOI2016】排列计数
  • 5409【SDOI2016】模式字符串
  • 5410【SDOI2016】墙上的句子
  • 5413【SDOI2016】齿轮

4644【SDOI2016】储能表

考虑二进制下数位 d p dp dp,令 > k >k >k表示满足条件,计算满足条件的数个数及和

记录 f [ N ] [ 0 / 1 ] [ 0 / 1 ] [ 0 / 1 ] f[N][0/1][0/1][0/1] f[N][0/1][0/1][0/1]表示 f [ s t e p ] [ 顶 着 n ] [ 顶 着 m ] [ > k ] f[step][顶着n][顶着m][>k] f[step][n][m][>k]的和,记同样的 g g g表示个数

d f s ( s t e p , 顶 着 n 上 限 , 顶 着 m 上 限 , 顶 着 k 下 限 ) dfs(step,顶着n上限,顶着m上限,顶着k下限) dfs(step,n,mk)

4645【SDOI2016】数字配对

最大费用流,跑一次判一次费用是否大于0

4647【SDOI2016】生成魔咒

S A M SAM SAM模板题

4648【SDOI2016】排列计数

错排问题,选 m m m个正确,剩下 n − m n-m nm个错排

a n s = C n m ⋅ f ( n − m ) ans=C_n^m\cdot f(n-m) ans=Cnmf(nm)

f ( n ) = ( n − 1 ) ⋅ ( f ( n − 1 ) + f ( n − 2 ) ) f(n) = (n-1)\cdot(f(n-1)+f(n-2)) f(n)=(n1)(f(n1)+f(n2))

预处理阶乘,阶乘逆元, f f f即可

5409【SDOI2016】模式字符串

h a s h hash hash+点分治

预处理前缀串和后缀串的 h a s h hash hash

例子: n = 7 , s = a b c n=7,s=abc n=7,s=abc

p r e = a , a b , a b c , a b c a , a b c a b , a b c a b c , a b c a b c a pre=a,ab,abc,abca,abcab,abcabc,abcabca pre=a,ab,abc,abca,abcab,abcabc,abcabca

s u f = c , b c , a b c , c a b c , b c a b c , a b c a b c , c a b c a b c suf = c,bc,abc,cabc,bcabc,abcabc,cabcabc suf=c,bc,abc,cabc,bcabc,abcabc,cabcabc

然后点分治,桶记录每个(长度 m o d   l e n ( s ) mod\ len(s) mod len(s)为关键字) p r e pre pre s u f suf suf出现的次数

5410【SDOI2016】墙上的句子

集合划分网络流,每个单词拆点

  • 正->反,2
  • 强制正: S S S->正, i n f inf inf
  • 强制反:反-> T T T i n f inf inf

对于句子,向每个单词(正)连 i n f inf inf边;单词(反)向句子连 i n f inf inf

  • 句子->单词正, i n f inf inf
  • 单词反->句子, i n f inf inf

a n s ans ans=最小割+回文单词个数

5413【SDOI2016】齿轮

带权并查集

考虑连动的传递性

  • a a a-> b = A b=A b=A b b b-> c = B c=B c=B a a a-> c = A B c=AB c=AB
  • a a a-> b = A b=A b=A a a a-> c = B c=B c=B b b b-> c = A B c=\frac{A}{B} c=BA

然后每次合并

  • 不在一个集合用1合并
  • 在一个集合用2判矛盾

你可能感兴趣的:(题解题解,省选刷题)