题目分析:

题解好高深......

我给一个辣鸡做法算了,题解真的看不懂。

注意到方差恒为$0$,那么其实就是要我们求$\sum_{i=0}^{n}\binom{n}{i}(i^k-(n-i)^k)^2$。

转换一下

$\sum_{i=0}^{n}\binom{n}{i}(i^k-(n-i)^k)^2$

$=2\sum_{i=0}^{n}\binom{n}{i}(i^{2k}-i^k(n-i)^k)$

注意到$i^{2k}$与$i^k(n-i)^k$在模$m$意义下都是一个周期为$m$的数列,那么我们需要求出每隔$m$个的组合数的和,即:

$2\sum_{i=0}^{m-1}(\sum_{j=0}^{\frac{n-i}{m}}\binom{n}{i+j*m}(i^{2k}-i^k(n-i)^k))$

把焦点放到内部的求和里面去,它是很简单的一个式子,试着转化它。首先我们可以根据Lucas定理分析出,对于外部的$i$,它的结果中一定有$ \binom{n\%m}{i} $。

剩下的是什么?首先有不等式$i+j*m \leq n\%m + \left \lfloor \frac{n}{m} \right \rfloor*m$。在这里我们毫无疑问地认为$i \leq n\%m$。否则对结果无影响。

我们接受$\left \lfloor \frac{n}{m} \right \rfloor$的所有影响,取满它,取满一排,它是$2$的次幂。

所以这个式子就等于$2\sum_{i=0}^{m-1}(\binom{n\%m}{i}*2^{\left \lfloor \frac{n}{m} \right \rfloor}(i^{2k}-i^k(n-i)^k))$

$\left \lfloor \frac{n}{m} \right \rfloor$很大,采用费马定理优化。

这样我们就可以解决它在$O(mlogk)$的时间内了。

注意,如果我们会线性求逆元以及线性筛,可以去掉log。

代码:

 #include<bits/stdc++.h>
using namespace std; const int maxn = ; int mod,nr,k,np;
char str[maxn];
int str2[maxn]; int c[maxn],rw[maxn]; void read(){
scanf("%s",str);
scanf("%d%d",&k,&mod);
int len = strlen(str);
for(register int i=;i<len;i++){ nr = nr*+str[i]-''; nr %= mod; }
for(register int i=,num=;i<len;i++){
np = np*+str[i]-''; str2[i] = np/mod; np %= mod;
} np = ;
for(register int i=;i<len;i++){
np = np*+str2[i]; np %= (mod-);
}
} int fast_pow(int now,int pw){
int ans = ,dd = now,base = ;
while(base <= pw){
if(base & pw){ans = (1ll*ans*dd)%mod;}
dd = (1ll*dd*dd)%mod;
base<<=;
}
return ans;
} int prime[maxn/],flag[maxn],num;
void get_prime(int N){
rw[] = ; flag[] = ;
for(int i=;i<=N;i++){
if(!flag[i]){prime[++num]=i;rw[i]=fast_pow(i,k);}
for(int j=;j<=num&&i*prime[j]<=N;j++){
flag[i*prime[j]] = ;
rw[i*prime[j]] = (1ll*rw[i]*rw[prime[j]])%mod;
if(i%prime[j] == ) break;
}
}
} void init(){
get_prime(nr);
np = fast_pow(,np+); c[] = ;
for(register int i=;i<=nr;i++){
c[i] = (1ll*c[i-]*(nr-i+))%mod;
c[i] = (1ll*c[i]*fast_pow(i,mod-))%mod;
}
} void work(){
int ans = ;
for(register int i=;i<mod;i++){
if(i > nr) break;
int hh = rw[i];
int pp = ((1ll*hh*hh)%mod) - (1ll*hh*rw[nr-i])%mod;
if(pp < ) pp += mod;
pp = (1ll*pp*c[i])%mod;
ans += pp; if(ans >= mod) ans -= mod;
}
ans += mod; if(ans >= mod) ans -=mod;
ans = (1ll*np*ans)%mod;
printf("%d",ans);
} int main(){
read();
init();
work();
return ;
}

51Nod1778 小Q的集合 【组合数】【Lucas定理】的更多相关文章

  1. uoj86 mx的组合数 (lucas定理+数位dp+原根与指标+NTT)

    uoj86 mx的组合数 (lucas定理+数位dp+原根与指标+NTT) uoj 题目描述自己看去吧( 题解时间 首先看到 $ p $ 这么小还是质数,第一时间想到 $ lucas $ 定理. 注意 ...

  2. [Swust OJ 247]--皇帝的新衣(组合数+Lucas定理)

    题目链接:http://acm.swust.edu.cn/problem/0247/ Time limit(ms): 1000 Memory limit(kb): 65535   Descriptio ...

  3. luogu4345 [SHOI2015]超能粒子炮·改(组合数/Lucas定理)

    link 输入\(n,k\),求\(\sum_{i=0}^k{n\choose i}\)对2333取模,10万组询问,n,k<=1e18 注意到一个2333这个数字很小并且还是质数这一良好性质, ...

  4. 【(好题)组合数+Lucas定理+公式递推(lowbit+滚动数组)+打表找规律】2017多校训练七 HDU 6129 Just do it

    http://acm.hdu.edu.cn/showproblem.php?pid=6129 [题意] 对于一个长度为n的序列a,我们可以计算b[i]=a1^a2^......^ai,这样得到序列b ...

  5. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

  6. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix

    Tom and matrix Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...

  7. 【组合数+Lucas定理模板】HDU 3037 Saving

    acm.hdu.edu.cn/showproblem.php?pid=3037 [题意] m个松果,n棵树 求把最多m个松果分配到最多n棵树的方案数 方案数有可能很大,模素数p 1 <= n, ...

  8. CodeForces-451E:Devu and Flowers (母函数+组合数+Lucas定理)

    Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th box contain ...

  9. HDU3037Saving Beans(组合数+lucas定理)

    Problem Description Although winter is far away, squirrels have to work day and night to save beans. ...

随机推荐

  1. C# Type.GetType 返回NULL 问题解决记录

    Type.GetType("OP.Client.Html.Resources.KenFengFormMethod"); 从Dll里面获取KenFengFormMethod这个会返回 ...

  2. React中嵌套组件与被嵌套组件的通信

    前言 在React项目的开发中经常会遇到这样一个场景:嵌套组件与被嵌套组件的通信. 比如Tab组件啊,或者下拉框组件. 场景 这里应用一个最简单的Tab组件来呈现这个场景. import React, ...

  3. 第十二次oo作业

    作业十二 规格化设计简介 规格化设计的发展历史 1950年代,第一次分离,主程序与子程序的分离结构是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过 ...

  4. VMware vSphere 6 序列号

    vSphere 6 Hypervisor HY0XH-D508H-081U8-JA2GH-CCUM2 4C4WK-8KH8L-H85J0-UHCNK-8CKQ8 NV09R-2W007-08D38-C ...

  5. H5 30-CSS元素的显示模式

    30-CSS元素的显示模式 我是div 我是段落 我是标题 我是span 我是加粗 我是强调 <!DOCTYPE html><html lang="en"> ...

  6. POJ 2406 Power Strings(KMP)

    Description Given two strings a and b we define a*b to be their concatenation. For example, if a = & ...

  7. 如何实现用将富文本编辑器内容保存为txt文件并展示

    1.实现思路 创建一个xx.txt文件,存放于项目路径下 用文件流去读取文件内容并将读取的内容存放到页面的富文本编辑器框内 富文本编辑框内容改变后,保存时用文件流的方式保存到xx.txt文件中 提示: ...

  8. 学习mongoDB的一些感受(转自:http://blog.csdn.net/liusong0605/article/details/11581019)

    曾经使用过mongoDB来保存文件,最一开始,只是想总结一下在开发中如何实现文件与mongoDB之间的交互.在此之前,并没有系统的了解过mongoDB,虽然知道我们用它来存储文件这些非结构化数据,但是 ...

  9. Python_动态参数、名称空间、作用域、作用域链、加载顺序、函数的嵌套、global、nonlocal

    1.动态参数 当实参数量与形参数量相等时,参数传递正常. def func1(a, b, c): pass func1(1, 2, 3) 当实参数量与形参数量不相等时,则会报错. def func1( ...

  10. Golang开发工具LiteIDE使用方法整理

    安装 参考github的说明 添加GOPATH 创建workspace 创建新文件 运行程序 Liteide中运行程序有两种方式: FR(FileRun)是编译并运行单个文件,可以使用Shift + ...