IOI2021 集训队自选题 Gem Island 2

题目链接

默认读者已经会了 ICPC2018 World Final Gem Island

下文的 ai 均表示分裂次数而非宝石个数

考虑期望的线性性,不难发现恰好有 k 个人的分裂次数大于 i 时,对答案有 min(k,r) 的贡献,即答案为

i0k0(nk)([xd](1xi+11x)nk(xi+11x)k)min(k,r)

首先可以把 11x 都提出来并拆开 min 分为两种情况

考虑求出了 i=0 时的多项式 F(x) 答案即为 [xd]i0F(xi+1)(1x)n 求出了 F(x) 就可以用高维前缀和(狄利克雷前缀和)把每一次的系数贡献到它所有倍数的答案,就求出了分子,由于 [xi](1+x+x2+)n=(n+i1n1) 不难直接求出答案,于是只考虑 F(x)

F(x)=rkr(nk)(1x)nkxk+krk(nk)(1x)nkxk=r(k0(nk)(1x)nkxkkr(nk)(1x)nkxk)+nxkr(n1k1)(1x)(n1)(k1)xk1=rrkr(nk)(1x)nkxk+nxkr1(n1k)(1x)n1kxk

不难发现化为了同一种问题,另外,其中常数项 r 可以直接去掉,因为常数项都是不贡献到答案的,于是答案为

(1)rkr(nk)(1x)nkxk+nxkr1(n1k)(1x)n1kxk

考虑重新定义 F(x)=kr(nk)(1x)nkxk,并定义 f(x)=kr(nk)xk

发现

f(x)=krk(nk)xk1=nkr(n1k1)xk1

这个形式看起来很能裂项相消,于是有:

nf(x)xf(x)=nkr(nk)xknkr(n1k1)xk=nkr(n1k)xk=f(x)+n(n1r)xr

得到:

(2)(1+x)f(x)=n(f(x)(n1r)xr)

f(x) 带回 F(x)F(x)=(1x)nf(x1x)

求导得:

考虑到 带入 式:

乘上 得到:

再带回原式我们得到了

最后再积分即可,注意这么做之后常数项会丢失,观察 式发现,对于前面一部分,常数项不会贡献到答案,但后一部分因为乘上了 会贡献到答案到一次项,通过手算发现一次项系数为 ,直接手动加上即可

时间复杂度


IOI2021 集训队自选题 Gem Island 2
https://blog.seniorious.cc/2020/gem-island-2/
作者
Seniorious
发布于
2020年12月25日
许可协议
0 条评论
未登录用户
支持 Markdown 语法

来做第一个留言的人吧!