题意简述
TT组数据。给定n,mn,m,求(x2+x+1)n(x2+x+1)n中,xmxm项的系数是多少。答案对33取膜。
(这个膜数很神奇!注意!突破点就在这!)
T<=1e4T<=1e4,n<=1e15n<=1e15,m<=2nm<=2n。
思路框架
答案是Cm2n×(m%2+1)Cm2n×(m%2+1),对33取膜(写个LucasLucas即可)
具体思路
首先,我们分括号讨论。因为是(x2+x+1)n(x2+x+1)n,所以有nn个括号,并且每个括号可以出x2,x,1x2,x,1。然后我们要求,有多少种方案使得每个括号中出的数积为xmxm。
我们开始打草稿:我们把nn个括号从11到nn顺序编号,每个括号上面有两个复选框。打了几个勾,就是代表出xx的多少次方。具体来说就是:
一个都没打勾,代表出x0x0(x0x0就是11);其中一个打了勾,代表出xx;两个都打了勾,代表出x2x2。
如图所示是n=4n=4的情况:
我们这样勾选:
那就相当于:
第一个括号出xx
第二个括号出x2x2
第三个括号出xx
第四个括号出xx
那它就会给x5x5那一项贡献一种情况。
那么我们现在考虑xmxm项的系数,换句话说就是有多少种方法凑出xmxm。
显然,上面的复选框中,我们每打一个勾,乘出来就多一个xx。(上面打了55个勾,乘起来就是x5x5)然后一共有2n2n个复选框,所以答案就是Cm2nCm2n。
这就完了?不!这样考虑有重复的!
假如第ii个括号出的是xx,那就相当于在ii上面两个复选框中,其中一个要打勾。而我们只在意数量,具体打勾打上面那个框还是下面的那个,是一样的。那就会把一个答案算两遍,所以要除以22。
假设我们有kk个括号出的是xx,那么我们的答案就要除以一个2k2k。
首先,kk和mm肯定是同奇偶的。
稍微证一下(会证跳过): 有kk个括号出xx,那剩下xm−kxm−k都是由出11或x2x2组成的。m−km−k由若干个00和22相加而成,所以m−km−k是偶数。所以mm和kk同奇偶。
然后,在模三意义下,2的逆元就是其本身!所以,除以一个2k2k,就相当于乘以一个2k2k。
还没完,我们继续化。我们发现,22的幂除以33的余数是:2,1,2,1,2,1…2,1,2,1,2,1…。具体点说,2k%3=(k%2)+12k%3=(k%2)+1。而kk和mm又同奇偶,所以,所有的k%2+1k%2+1都等于m%2+1m%2+1。
综上,我们的答案就是Cm2n×(m%2+1)Cm2n×(m%2+1)。
代码
1 |
|