NOI2020省队选拔赛前训练(打摆)记录

Day -9

打了一场省选模拟,又垫底了。

T1

带分类讨论,不想写。

甚至数据出锅

T2

AGC020C

T3

读错题了还能拿到50pts

首先先将坐标分开处理,记\(s_i=\sum_{j=0}^ix_j\),且令\(x_0=1\),那么\(Ans=\sum_{i=1}^n[\max(s_i,s_{i-1})>0][\min(s_i,s_{i-1})<0]\).

考虑将\((s_{i-1},s_i)\)看成一段区间,那么答案就是包含\(0\)的区间数量。

注意到每次修改影响到的都是从当前指针开始的后缀,我们可以考虑将当前指针之后的区间全部丢入线段树中,这些区间会对应一个全新的零点(由于修改产生的位移),那么对坐标的修改可以考虑先减去之前的贡献,再加上修改后新的贡献即可。对指针的修改则可以直接加入/删去线段树中的一个区间。

Day -7

打了一场省选模拟,又垫底了。

今天debuff真的严重,唯一的好消息可能只有把(看起来是)稍微码农的字符串写出来了。

T1

没有把这个题做出来,感觉思维有点危险。

一个简单的暴力是记\(f_{i,j}\)表示在经过了\(i\)条边后能否到达点\(j\)。这个东西可以暴力转移然后过掉sub2. 看起来这个可以矩乘转移,然后又注意到转移矩阵只有\(O(c)\)种,看起来很可行。但是会被卡,注意到这个矩阵乘法可以只用and和or,于是可以用bitset优化矩阵乘法。

T2

注意到\(\prod_{i=1}^n a_i-(a_j-1)\prod_{i=1,i\neq j}^na_i=\prod_{i=1,i\neq j}^na_i\),所以k次操作后产生的伤害和只与初状态和末状态有关,有一个显然的\(O(nk^2)\)dp就不再说明。

记第\(i\)个元素被减了\(b_i\)次,那么答案就是:

\[\frac{1}{n^k}\sum_{\sum b_i=k}\frac{k!}{\prod b_i!}\prod(a_i-b_i)=\frac{k!}{n^k}\sum_{\sum b_i=k} \prod_{i=1}^n\frac{(a_i-b_i)}{b_i!} \]

后面那个东西很像一堆生成函数的某个次项,记\(F_i(x)=\sum_{j\geq 0}\frac{a_i-j}{j!}x^j\),那么后面那个东西就是\([x^k]\prod F_i(x)\).

\[F_i(x)=\sum_{j\geq 0} \frac{a_i}{j!}x^j-\sum_{j>0} \frac{x^j}{(j-1)!}=a_ie^x-xe^x=(a_i-x)e^x\\ \prod_{i=1}^nF_i(x)=e^{nx}\prod_{i=1}^n(a_i-x) \]

后面的那个东西可以分治NTT做,之后枚举乘积的次数暴力算一算就好了。

T3

\[ans(r)=\sum_{w\neq \emptyset} F_r(W)\sum_{i=1}^r accurance(w,s_i)=\sum_{w\neq \emptyset}F_r^2(w) \]

也就是对\(\forall r\in[1,n]\)求出每个子串在\(s_{1...r}\)中出现次数的平方。

建出广义SAM,对parent树做树链剖分,每次枚举\(r\)时先找到对应节点再跳parent,用树链剖分加速这个过程的同时用线段树维护出现次数的平方和。看起来很复杂但是写起来异常的清晰。

Day -4

打了一场省选模拟,又垫底了。

T1

POI2014 Hotel

T2

\[\sum_{i=0}^c\lfloor\frac{ia}{c}\rfloor=\frac{na}{c}+\sum_{i=0}^{\frac{n}{c}-1}\sum_{j=0}^{c-1}\lfloor\frac{(ic+j)a}{c}\rfloor=\frac{na}{c}+c\sum_{i=0}^{\frac{n}{c}-1}ia+\frac{n}{c}\sum_{i=0}^{c-1}\lfloor\frac{ia}{c}\rfloor \]

考虑如何快速计算最后一项

\[\sum_{i=0}^{c-1}\lfloor\frac{ia}{c}\rfloor=\sum_{i=0}^{c-1}(\frac{ia}{c}-\frac{ia\%c}{c}) \]

第一项就是个等差数列求和,对第二项,记\(d=\gcd(a,c)\),不难发现\(ia\% c\)是一个以\(d\)为周期的数列,且每个周期内的数从大到小排列为\(jd(0\leq j<\frac{c}{d})\),故

\[\sum_{i=0}^{c-1}\lfloor\frac{ia}{c}\rfloor=\frac{c(c-1)}{2}\frac{a}{c}-d^2\frac{(\frac{c}{d}-1)\frac{c}{d}}{2c}=\frac{a(c-1)-(c-d)}{2} \]

直接计算即可

T3

建出广义SAM,然后那询问串暴力在上面跑匹配即可。在parent树上预处理出每个点到根节点的链中所有节点对应的串的总个数。这样可以在之后的匹配的统计答案中避免暴力跳parent

Day -3

打了一场省选模拟,又垫底了。

T1

\(a_n\)为所求,那么有\(a_n=\sum_{i=1}^{n-1}a_i+n^k\).

\(s_n=\sum_{i=1}^na_i\),则\(s_n=s_{n-1}+a_n=2s_{n-1}+n^k\),并将问题转化为求\(s_n\)

再次化简得到\(\frac{s_n}{2^n}=\frac{s_{n-1}}{2^{n-1}}+\frac{n^k}{2^n}\).于是可以考虑求数列\(\{\frac{n^k}{2^n}\}\)的前缀和。

由于根据数据范围的要求我们需要一个与\(k\)相关的算法,所以在算这个前缀和的时候我们需要枚举的下标不是\(n\)而是\(k\)

\(f_k=\sum_{i=1}^n\frac{i^k}{2^i}\),则由错位相减法知

\[\begin{aligned} f_k-\frac{1}{2}f_k=&\sum_{i=0}^{n-1}\frac{(i+1)^k}{2^{i+1}}-\sum_{i=1}^n\frac{i^k}{2^{i+1}}\\ =&\frac{1}{2}-\frac{n^k}{2^{n+1}}-\sum_{i=1}^{n-1}\frac{(i+1)^k-i^k}{2^{i+1}}\\ =&\frac{1}{2}-\frac{n^k}{2^{n+1}}-\sum_{i=1}^{n-1}\frac{\sum_{j=0}^k{k\choose j}i^j-i^k}{2^{i+1}}\\ =&\frac{1}{2}-\frac{n^k}{2^{n+1}}\sum_{i=1}^{n-1}\frac{\sum_{j=0}^{k-1}{k\choose j}i^j}{2^{i+1}}\\ =&\frac{1}{2}-\frac{n^k}{2^{n+1}}+\sum_{j=0}^{k-1}{k\choose j}\sum_{i=1}^{n-1}\frac{i^j}{2^{i+1}}=\frac{1}{2}f_k\\ \end{aligned} \\ f_k=1-\frac{n^k}{2^n}+\sum_{j=0}^{k-1}{k\choose j}\sum_{i=1}^{n-1}\frac{i^j}{2^i}=1-\frac{n^k}{2^n}+\sum_{j=0}^{k-1}{k\choose j}(f_j-\frac{n^j}{2^n}) \]

预处理出\(2^n,n^i\)即可。

T2

维护的是\(\prod_{i=1}^n (A_ix+B_i)\)的最低的\(c\)次项,由于\(c\)很小可以直接用线段树存每个区间的多项式的积。

T3

考虑如何使用最小割解决这个问题。

钦点\(1\)号点与\(s\)相连,再枚举一个一定和\(t\)相连的点,两条边的流量均为正无穷,跑最大流求出最小割即可。

posted @ 2020-06-12 19:52  EncodeTalker  阅读(343)  评论(0编辑  收藏  举报