51Nod1778 小Q的集合 【组合数】【Lucas定理】
题目分析:
题解好高深......
我给一个辣鸡做法算了,题解真的看不懂。
注意到方差恒为$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定理】的更多相关文章
- uoj86 mx的组合数 (lucas定理+数位dp+原根与指标+NTT)
uoj86 mx的组合数 (lucas定理+数位dp+原根与指标+NTT) uoj 题目描述自己看去吧( 题解时间 首先看到 $ p $ 这么小还是质数,第一时间想到 $ lucas $ 定理. 注意 ...
- [Swust OJ 247]--皇帝的新衣(组合数+Lucas定理)
题目链接:http://acm.swust.edu.cn/problem/0247/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- luogu4345 [SHOI2015]超能粒子炮·改(组合数/Lucas定理)
link 输入\(n,k\),求\(\sum_{i=0}^k{n\choose i}\)对2333取模,10万组询问,n,k<=1e18 注意到一个2333这个数字很小并且还是质数这一良好性质, ...
- 【(好题)组合数+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 ...
- 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 95 Solved: 33[Submit][Statu ...
- 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
Tom and matrix Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...
- 【组合数+Lucas定理模板】HDU 3037 Saving
acm.hdu.edu.cn/showproblem.php?pid=3037 [题意] m个松果,n棵树 求把最多m个松果分配到最多n棵树的方案数 方案数有可能很大,模素数p 1 <= n, ...
- 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 ...
- HDU3037Saving Beans(组合数+lucas定理)
Problem Description Although winter is far away, squirrels have to work day and night to save beans. ...
随机推荐
- 2019年第一天——使用Visual Studio 2019 Preview创建第一个ASP.Net Core3.0的App
一.前言: 全文翻译自:https://www.talkingdotnet.com/creating-first-asp-net-core-3-0-app-visual-studio-2019/ Vi ...
- 自定义分页及Cookie、Session机制
分页 自定义分页 data = [] , ): tmp = {"id": i, "name": "alex-{}".format(i)} d ...
- [LeetCode] 56 - Merge Intervals 合并区间
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- python全栈开发慕课网
前端 web框架: flask:简单.轻量.灵活性大 (官网,stck overflowa); 目录结构:配置,发布,资源,日志,测试... 前后端协作:整体发布,前后端分离发布 django:简单, ...
- scrapy框架爬取妹子图片
首先,建立一个项目#可在github账户下载完整代码:https://github.com/connordb/scrapy-jiandan2 scrapy startproject jiandan2 ...
- Day7 Ubantu学习(一)
Linux是多用户操作系统 Ubantu学习参考网址:https://www.cnblogs.com/resn/p/5800922.html 1.虚拟机网络类型的理解 bridged(桥接模式) : ...
- gnuplot画折线图
之前尝试用jfreechart画自定义横坐标的折线图或时序图,发现很复杂,后来改用gnuplot了. gnuplot在网上一搜就能找到下载地址. 安装完成后,主要是命令行形式的交互界面,至少比jfre ...
- SAP配置BOM的适用范围
配置BOM中定义属性,单纯的编码要搞死人: 适合小批量周期短多品种
- MySQL客户端工具及SQL
一.客户端命令介绍 mysql mysqladmin mysqldump mysql 1.用于数据库的连接管理 2. mysqladmin 1. 2. mysqldump 1. 2.
- Linux基础学习笔记1
MBR分区 主分区: 1-4,一块硬盘最多四个主分区,对主机必须有,主区可以格式化ntfs,存数据: 扩展分区:1-4,一块硬盘最多一个扩展分区,可以没有扩展分区,划分更小的单元,即逻辑分区: 逻辑分 ...