SDOI2019 总结

文章目录

  • 6423【SDOI2019】快速查询
  • 6426【SDOI2019】热闹的聚会与尴尬的聚会
  • 6427【SDOI2019】移动金币

6423【SDOI2019】快速查询

标记维护序列信息, A d d , M u l , S u m , A n s Add,Mul,Sum,Ans Add,Mul,Sum,Ans

H a s h Hash Hash表维护单点信息,注意转换:

a [ x ] = M u l ⋅ v a l + A d d a[x]=Mul\cdot val+Add a[x]=Mulval+Add

∴ v a l = a [ x ] − A d d M u l \therefore val = \frac{a[x]-Add}{Mul} val=Mula[x]Add

逆元用线性递推求

每个操作复杂度 O ( 1 ) O(1) O(1),总复杂度 O ( q ⋅ t ) O(q\cdot t) O(qt)

6426【SDOI2019】热闹的聚会与尴尬的聚会

观察两个式子,可以写成: ( p + 1 ) ( q + 1 ) ≥ n + 1 (p+1)(q+1)\geq n+1 (p+1)(q+1)n+1

考虑两次贪心:

先求 q q q,考虑最大独立点集:

  • 每次找到图中度数最小的点
  • 将这个点加入 q q q
  • 删掉这个点以及和它相邻的点

对于 p p p,记录 m i n _ d min\_d min_d表示每次开始操作时,图中最小的度数(注意到 m i n _ d = d [ q i ] min\_d=d[q_i] min_d=d[qi])。当 m i n _ d min\_d min_d取到最大值时,当前图中所有点都属于 p p p

简易证明:

  • 对于求 q q q的算法,显然 ∑ ( d [ q i ] + 1 ) = n \sum(d[q_i]+1)=n (d[qi]+1)=n(每次删 d [ q i ] + 1 d[q_i]+1 d[qi]+1个点, q q q次操作删完所有点)
  • 根据求 p p p的方法, p = m a x { d [ q i ] } p=max\{d[q_i]\} p=max{d[qi]}

( q + 1 ) ( p + 1 ) = ( q + 1 ) ( m a x _ d + 1 ) ≥ q ⋅ ( m a x _ d + 1 ) ≥ ∑ ( d [ q i ] + 1 ) = n (q+1)(p+1)=(q+1)(max\_d+1)\geq q\cdot(max\_d+1)\geq\sum(d[q_i]+1)=n (q+1)(p+1)=(q+1)(max_d+1)q(max_d+1)(d[qi]+1)=n

∴ ( q + 1 ) ( p + 1 ) ≥ n \therefore (q+1)(p+1)\geq n (q+1)(p+1)n

6427【SDOI2019】移动金币

博弈论+计数 d p dp dp

博弈为阶梯博弈,结论:第奇数个空格的长度的异或和不为0,则必胜

容斥,总数-必败=必胜,必败即为异或和=0

相当于把 n − m n-m nm个空格分到 m + 1 m+1 m+1个空段里( n n n个位置, m m m个金币, n − m n-m nm个空格, m + 1 m+1 m+1个空段),其中第奇数个空段的异或和为 0 0 0

由于是异或,考虑一位一位地运算,设 f [ i ] [ j ] f[i][j] f[i][j]表示处理到了第 i i i位(二进制),还有 j j j个空格可以放

f [ i ] [ j ] = ∑ 2 ∣ k f [ i + 1 ] [ j − k ⋅ 2 i ] f[i][j]=\sum_{2|k} f[i+1][j-k\cdot2^i] f[i][j]=2kf[i+1][jk2i]

意义:只考虑第 i i i位,那么只要放偶数个 1 1 1,异或和都为 0 0 0

统计答案: a n s = ∑ f [ 0 ] [ i ] ⋅ P l a c e ( i , m + 2 2 ) ans=\sum f[0][i]\cdot Place(i,\frac{m+2}2) ans=f[0][i]Place(i,2m+2)

其中 P l a c e ( i , m + 2 2 ) Place(i,\frac{m+2}2) Place(i,2m+2)表示把剩下的 i i i个空格随便丢到第偶数个格子( m + 2 2 \frac{m+2}2 2m+2个)里,可以使用隔板法 P l a c e ( n , m ) = C n + m − 1 n − 1 Place(n,m)=C^{n-1}_{n+m-1} Place(n,m)=Cn+m1n1

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