[NOI2019]斗主地

Posted StaroForgin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[NOI2019]斗主地相关的知识,希望对你有一定的参考价值。

斗主地

题解

我们可以先来考虑位置 i i i的牌一轮中被洗到位置 j j j的概率。
如果 i ⩽ A i\\leqslant A iA,贡献显然是 ( n − j ) ! A ! ( n − A ) ! n ! ( A − i ) ! ( n − A − j + i ) ! ( j − 1 i − 1 ) = ( j − 1 i − 1 ) ( n − j A − i ) ( n A ) \\frac(n-j)!A!(n-A)!n!(A-i)!(n-A-j+i)!\\binomj-1i-1=\\frac\\binomj-1i-1\\binomn-jA-i\\binomnA n!(Ai)!(nAj+i)!(nj)!A!(nA)!(i1j1)=(An)(i1j1)(Ainj),我们可以把每个 i i i j j j的贡献的算出来,这相当于一个矩阵。
初始值相当于是一个向量,它乘上这 m m m个矩阵就相当于进行了 m m m次洗牌。
而所有 A A A都相等的部分相当于是直接矩阵快速幂,这样我们就能拿到 40 p t s 40pts 40pts了。

但让我们理性观察一下后面的点,它们的 n n n都达到了 1 0 7 10^7 107的级别,显然不可能用我们上面矩阵的方法做了,理性考虑一下还有什么可能做的方法。
我们观察一下初始的这些 f ( i ) = i f(i)=i f(i)=i f ( i ) = i 2 f(i)=i^2 f(i)=i2,它们好像都是多项式的形式,理性猜测一下, 我们变化后每个位置的 f ′ ( i ) f'(i) f(i)依旧是一个多项式。
然后你随便打个插值什么的,可以发现, t y p = 1 typ=1 typ=1就是一个一次多项式, t y p = 2 typ=2 typ=2是一个二次多项式。
所以我们可以暴力手算出下一轮三个位置上的值,然后把下一轮的多项式给插出来。
好的,做法这里就讲完了,下面我们来讲讲它为什么是一个多项式。

考虑归纳证明,显然,最开始它肯定是多项式,考虑多项式变化一轮后的样子。
首先,多项式肯定是可以通过斯特林反演变化成组合数的,我们假定我们上一层的多项式为 f ( x ) = ∑ k a k ( x − 1 k ) f(x)=\\sum_ka_k\\binomx-1k f(x)=kak(kx1)。(这里化成 ( x − 1 k ) \\binomx-1k (kx1)而不是 ( x k ) \\binomxk (kx)是为了后面好做点)
考虑下一层位置 i i i上的值怎么计算,利用我们上面推出来的贡献,这里照样是只算 ⩽ A \\leqslant A A部分的贡献值,因为大于 A A A的与小于 A A A的部分形式是基本一样的,如果小的部分是多项式,大的部分也会是多项式。
f i ′ = ∑ k a k ( n A ) ∑ j = 1 A ( j − 1 k ) ( i − 1 j − 1 ) ( n − i A − j ) = ∑ k a k ( n A ) ∑ j = 1 A ( i − 1 k ) ( i − k − 1 j − k − 1 ) ( n − i A − j ) = ∑ k a k ( i − 1 k ) ( n A ) ∑ j = 1 A − k − 1 ( i − k − 1 j ) ( n − i A − j − k − 1 ) = ∑ a k ( n − k − 1 A − k − 1 ) ( n A ) ( i − 1 k ) f'_i=\\sum_k\\fraca_k\\binomnA\\sum_j=1^A\\binomj-1k\\binomi-1j-1\\binomn-iA-j\\\\ =\\sum_k\\fraca_k\\binomnA\\sum_j=1^A\\binomi-1k\\binomi-k-1j-k-1\\binomn-iA-j\\\\ =\\sum_k\\fraca_k\\binomi-1k\\binomnA\\sum_j=1^A-k-1\\binomi-k-1j\\binomn-iA-j-k-1\\\\ =\\sum\\fraca_k\\binomn-k-1A-k-1\\binomnA\\binomi-1k fi=k(An)akj=1A(kj1)(j1i1)(Ajni)=k(An)akj=1A(ki1)(jk1ik1)(Ajni)=k(An)ak(ki1)j=1Ak1(jik1)(Ajk1ni)=(以上是关于[NOI2019]斗主地的主要内容,如果未能解决你的问题,请参考以下文章

[NOI2019]斗主地 [拉格朗日插值, 找规律, 组合数学]

[NOI1999] 棋盘分割(推式子+dp)

线性规划费用流解法(Bzoj1061: [Noi2008]志愿者招募)

BZOJ 4945 [Noi2017]游戏

LocalMaxima_NOI导刊2009提高

[NOI2010][bzoj2005] 能量采集 [欧拉函数+分块前缀和优化]