首页 > 技术文章 > November Challenge 2020 Division 1

Grice 2020-11-09 21:04 原文

完成情况:
Restore Sequence(11.8)
Magical Candy Store(11.8)
Scalar Product Tree(11.9)
Unusual Queries(11.9)
Chef and the Combination Lock(11.10)
Red-Black Boolean Expression(11.9)
Panic! at the Disco(11.13)
Selecting Edges(未做)
Connect on a Grid (Challenge)(未做)

题解赛后发

挑几题讲一下

Scalar Product Tree

这是本次比赛我最喜欢的一题,说不上来为什么,可能代码比较容易写?

设阈值\(S\),钦定\(x\),若我们预处理:深度在\(dep_x=dep_y\equiv x(mod~S)\)的所有点对,复杂度为\(O(S\cdot 点对+qS)\)
选择点对数最小的层\(x\),复杂度为\(O(S(\frac{n}{S})^2+qS)\),由于\(n,q\)同阶,令\(S=\sqrt{n}\),总复杂度\(O(n\sqrt{n})\)
code

Chef and the Combination Lock

先写一下我自己的垃圾做法:
\(m=min\{\frac{a_i}{2}\}\)
\(Ans=\frac{1}{\prod\limits_{i=1}^n(a_i+1)} \sum\limits_{i=1}^m \prod\limits_{j=1}^n(a_j-2i-1)\)
对于\(Ans=\frac{1}{\prod\limits_{i=1}^n(a_i+1)}\sum\limits_{x=1}^m F(x)\)(其中\(F(x)=\prod\limits_{i=1}^n(a_i-2x-1)\)
可以发现\(Ans\)是关于\(m\)\(n+1\)次多项式,对于\(m'=[0,n+1]\),可以通过分治fft,然后把多项式插出来
code

官方题解:
把上面做法的\(F(x)\)系数求出来:令\(F(x)=\sum\limits_{i=0}^n f_ix^i\)
\(\begin{aligned} \sum\limits_{x=1}^m F(x)&=\sum\limits_{x=1}^m \sum\limits_{j=0}^n f_jx^j\\ &=\sum\limits_{i=0}^n f_i(\sum\limits_{x=1}^m x^i)\\ \end{aligned}\)
\(g_i=\sum\limits_{x=1}^m x^i\),写成egf的形式:\(G(x)=\sum\limits_{i=0}^{\infty}g_i\frac{x^i}{i!}\)
通过简单的推导可以得到\(G(x)=\frac{e^{(m+1)x-e^x}}{e^x-1}\),做一次多项式求逆得到\(g_i(i\in[0,n])\)

Panic! at the Disco

感谢emofunc学长:在比赛时,由于对扩域不熟悉,耐心地教我如何运算,还帮助我优化了很多常数

通过简单的推导,我们将问题转化为:

给定\(K\times K\)的矩阵\(A\)\(N\),求\(\sum\limits_{i=0}^N A^i(mod~998244353)\)\(K\le 100,N\le 10^{1000}\),矩阵的元素为\(a+b\sqrt{5}\)

\(O(K^3)\)找到特征多项式\(f(x)\),然后就是算\(\sum\limits_{i=0}^N x^i~mod~f(x)\),可以通过对\(N\)倍增算出
\(O(K^3+K^3logN+K^3)\)
code

Selecting Edges

不会做,神wasa855教的

可以发现选的一定是若干个菊花
然后随机成一个二分图跑网络流
正确率是1/2^k

推荐阅读