牛客练习赛107-题解

A.注意到n>m,n! mod m=0\forall n>m , n! \space mod \space m = 0,又有10!=3628800>10610! = 3628800 > 10^6,故对于n10n\ge 10,(n!)! mod m=0(n!)! \space mod \space m = 0. 然后预处理所有的1x<m1\le x < m,x! mod mx! \space mod \space m的值。每次对于小于1010nn,暴力计算n!n!的值,并查表得到(n!)! mod m(n!)! \space mod \space m的值。

B.注意到对于排列PP,若P1=1P_{1} = 1,则必有PP的前缀最小值变化次数(f(P)f(P))等于11。所以当P1=1P_{1} = 1时,取Q1=1Q_{1} = 1,则也有Q1=1Q'_{1} = 1,此时max(f(Q),f(Q))=1max(f(Q),f(Q')) = 1,显然取到最小值。 在P11P_{1} \neq 1时,Q1Q_{1}Q1Q'_{1}必有一个不为11,则答案至少为22(因为第一个位置和11所在的位置必然产生贡献),考虑构造答案为22QQ。不妨令Q1=1Q'_{1} = 1,则有f(Q)=1f(Q') = 1,此时QP1=1Q_{P_{1}} = 1已经决定,其余未决定。则令Q1=2Q_{1} = 2,那么f(Q)f(Q)必然为22。剩余的位置可以随便填。

C.分knk \le \sqrt{n}k>nk > \sqrt{n}考虑。 knk\le \sqrt{n}时,可以直接暴力计算答案,复杂度为logkn\sum{log_{k}{n}},不超过nlog(n)\sqrt{n}log(n). k>nk>\sqrt{n}时,注意到此时转换过去的数必为22位数,且低位为n mod k=nknkn\space mod \space k = n-k*\lfloor \frac{n}{k} \rfloor,高位为nk\lfloor \frac{n}{k} \rfloor,此时k2=1+max(nknk,nk)k_{2} = 1+max(n-k*\lfloor \frac{n}{k} \rfloor , \lfloor \frac{n}{k} \rfloor)。考虑进行整除分块。不妨设x=nkx=\lfloor \frac{n}{k} \rfloor,考虑xx所有对应的kk:    nknknk    n(k+1)nk    nk+1nk    nk+1=nk\qquad \space \space \space n-k\lfloor \frac{n}{k} \rfloor \ge \lfloor \frac{n}{k} \rfloor \\ \iff n \ge (k+1)\lfloor \frac{n}{k} \rfloor \\ \iff \frac{n}{k+1} \ge \lfloor \frac{n}{k} \rfloor \\ \iff \lfloor \frac{n}{k+1} \rfloor = \lfloor \frac{n}{k} \rfloor (最后一步可以脑补一下数轴) 由此,对于一个固定的xxk[l,r]k \in [l,r],仅有端点rr处选择k2=nkk_{2} = \lfloor \frac{n}{k} \rfloor,接下来就可以很快乐的整除分块了。

D.D<CD<C早就被猜到了,但是DD过的比BB多还是有点出乎意料… 对于一对(i,j)(i,j),进行一次操作等价于把所有的二进制位的11都尽量向jj位置靠拢。形式化地,对于某个二进制位xx,令ix,jxi_{x},j_{x}表示i,ji,j位置上的数的该位的值,则若ix,jxi_{x},j_{x}中有两个11或者零个11,执行操作后不变,否则变为ix=0,jx=1i_{x}=0,j_{x}=1。 对于总体来说,也是一样的。每个二进制位将所有的11尽量向后靠拢。形式化地,假设某个二进制位共有pp11,则后pp个数在该位为11,前npn-p个数在该位为00

E.读完就会做的题。本来这题时限3s3s,m=2e5,k=10m=2e5,k=10,哪怕在这种情况下std也是能跑过的,结果放宽限制发现大家还是被卡常数了,难受。 不妨令PuP_{u}表示LLuu的子树内的概率,令SuS_{u}表示uu子树内所有节点的pup_{u}的和。不难发现这件事等价于所有的选择的点全部在uu的子树内,所以Pu=(SuS1)kP_{u} = (\frac{S_{u}}{S_{1}})^{k}。 令AnsuAns_{u}代表LL恰好为uu的概率,则Ansu=PuPv=SukSvkS1kAns_{u} = P_{u} - \sum{P_{v}} = \frac{S_{u}^k-\sum{S_{v}^k}}{S_{1}^k},其中vvuu的儿子们。最终的期望为uAnsu\sum{u*Ans_{u}}。 由于可以把S1kS_{1}^k留在最后统一除,所以先抛掉这部分。考虑每个SukS_{u}^k的贡献,不难发现它在uu处的贡献为uSuku*S_{u}^k,而在fuf_{u}处的贡献为fuSuk-f_{u}*S_{u}^k,其中fuf_{u}uu的父亲,在其余各点处没有贡献。所以最后答案等于(ufu)Suk\sum{(u-f_{u})*S_{u}^k}。注意到ufuu-f_{u}是个常数,而每次更新只会更新该节点到根上的所有点的SuS_{u},故直接采用树剖线段树维护。线段树维护区间ufuu-f_{u}乘以SuS_{u}00次至kk次幂的和,每次打标记时通过组合数转移即可。时间复杂度O(mk2log2(n))O(mk^2log^2(n)),虽然看起来很大,但是跑起来很快。 本题还可以离线询问,线段树合并做到mk2log(n)mk^2log(n)(口胡的,没写过) Bonus:你能做的更快吗?

F.假设枚举最小值MM,则对应的EGF是(i=0k1xii!)M1×(i=0nxii!)mM×(i=knxii!)(\sum_{i=0}^{k-1}{\frac{x^i}{i!}})^{M-1} \times (\sum_{i=0}^{n}{\frac{x^i}{i!}})^{m-M} \times (\sum_{i=k}^{n}{\frac{x^i}{i!}}),所求答案为该EGF的xnx^n项系数乘以n!mn\frac{n!}{m^n}

不妨令A(x)=i=0k1xii!A(x) = \sum_{i=0}^{k-1}{\frac{x^i}{i!}} , B(x)=(i=0nxii!),C(x)=i=knxii!B(x) = (\sum_{i=0}^{n}{\frac{x^i}{i!}}) , C(x) = \sum_{i=k}^{n}{\frac{x^i}{i!}},则答案等于n!nm×[xn]M=1mC(x)×A(x)M1×B(x)mM×M\frac{n!}{n^m} \times [x^n] \sum_{M=1}^{m}{C(x) \times A(x)^{M-1} \times B(x)^{m-M} \times M},而后面那个多项式等于

C(x)mA(x)m+1B(x)(m+1)A(x)m+B(x)m+1(A(x)B(x))2C(x)\frac{mA(x)^{m+1} - B(x)(m+1)A(x)^m + B(x)^{m+1}}{(A(x)-B(x))^2},注意到C(x)=B(x)A(x)C(x)=B(x)-A(x),则上式等于mA(x)m+1B(x)(m+1)A(x)m+B(x)m+1C(x)\frac{mA(x)^{m+1} - B(x)(m+1)A(x)^m + B(x)^{m+1}}{C(x)},然后可以使用任意你喜欢的多项式技巧去计算这个式子了。这题时限似乎不紧吧。

全部评论
🤤
点赞 回复 分享
发布于 2022-12-24 01:36 湖南
🤤
点赞 回复 分享
发布于 2022-12-24 09:38 浙江
快速幂NTT过不了啊,还说什么时限不要紧,差评。
点赞 回复 分享
发布于 2023-01-04 14:29 河南

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务