题目分析:

题解好高深......

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

注意到方差恒为$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. Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用

    概述 Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Mi ...

  2. [故障公告]阿里云“华东1地域部分负载均衡https访问异常“引起部分站点无法访问

    今天上午 9:40 - 11:06 左右,由于阿里云“华东1地域部分负载均衡https访问异常”,造成我们的部分站点(尤其是博客后台)无法正常访问,给您带来了很大的麻烦,请您谅解. 现已恢复正常,如果 ...

  3. python第六章:三大利器(装饰器,迭代器,生成器)--小白博客

    python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...

  4. SQL Server(2000,2005,2008):恢复/回滚时间比预期长(译)

    我已经讨论了各种确定恢复状态的方法,但是本周我参与了一个围绕回滚的有趣讨论.交易已经运行了14个小时,然后发出了KILL SPID.SPID进入回滚,并发生2天和4小时. 自然的问题是为什么不14小时 ...

  5. HDU 3478 Catch (连通性&&二分图判断)

    链接 [https://vjudge.net/contest/281085#problem/C] 题意 一个n个点,m条边的图,开始的点是s 每次必须移动到相邻的位置,问你是否存在某个时刻所有点都可能 ...

  6. python札记

    进制转换 num = "0011"v = int(num, base=16)print(v)2->16

  7. PEP 8 python编程规范

    一 代码编排 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车. 类和to ...

  8. linux 服务器名 访问 shh免密码登录

    以根用户登录,或者登录后切换到根用户,然后在提示符下输入hostname命令,可以看出当前系统的主机名为localhost.localdomain.   更改/etc/sysconfig下的netwo ...

  9. [转帖]Docker的daemon.json的作用

    Docker(十六)-Docker的daemon.json的作用 https://www.cnblogs.com/zhuochong/p/10070434.html jfrog 培训的时候 说过这个地 ...

  10. Farm Irrigation

    题目:Farm Irrigation 题目链接:http://210.34.193.66:8080/vj/Problem.jsp?pid=1494 题目思路:并查集 #include<stdio ...