传送门
题意简述:问有多少数列满足如下条件:

  1. 所有数在[1,A][1,A][1,A]之间。
  2. 没有相同的数
  3. 数列长度为nnn

一个数列的贡献是所有数之积,问所有满足条件的数列的贡献之和。
A≤1e9,n≤500A\le1e9,n\le500A≤1e9,n≤500


思路:
肯定不能枚举所有情况。
我们先规定这个数列满足a1&lt;a2&lt;⋅˙⋅⋅&lt;ana_1&lt;a_2&lt;\dot\cdot\cdot\cdot&lt;a_na1​<a2​<⋅˙⋅⋅<an​,最后答案乘上n!n!n!即可。
现在转化一下问题:
就是求f(x)=∏i=1A(1+ix)f(x)=\prod_{i=1}^A(1+ix)f(x)=∏i=1A​(1+ix)这个多项式的xnx^nxn的系数是多少。
考虑定义状态fi,jf_{i,j}fi,j​表示多项式∏k=1i(1+kx)\prod_{k=1}^i(1+kx)∏k=1i​(1+kx)这个多项式xjx^jxj的系数。
于是有下面的转移:
fi,j=ifi−1,j−1+fi−1,jf_{i,j}=if_{i-1,j-1}+f_{i-1,j}fi,j​=ifi−1,j−1​+fi−1,j​ 可以暴力走一波了
然后把后面一项展开变成:
fi,j=ifi−1,j−1+(i−1)fi−2,j−1+fi−2,j=⋅˙⋅⋅=∑k=0i−1(k+1)fk,j−1f_{i,j}=if_{i-1,j-1}+(i-1)f_{i-2,j-1}+f_{i-2,j}=\dot\cdot\cdot\cdot=\sum_{k=0}^{i-1}(k+1)f_{k,j-1}fi,j​=ifi−1,j−1​+(i−1)fi−2,j−1​+fi−2,j​=⋅˙⋅⋅=∑k=0i−1​(k+1)fk,j−1​
这说明fi,jf_{i,j}fi,j​可以等于一个多项式。
相当于对于一个矩阵的某一行集体乘上一个数,然后用前缀和去更新当前状态。
于是f∗,jf_{*,j}f∗,j​对应多项式的最高次数等于f∗,j−1f_{*,j-1}f∗,j−1​对应多项式的最高次数+2+2+2,这样递推下去f∗,jf_{*,j}f∗,j​对应多项式的最高次数是2j2j2j。
这样我们知道了fn,kf_{n,k}fn,k​对应的多项式次数是2k2k2k,于是先暴力dpdpdp出f1→2k+1,kf_{1\rightarrow 2k+1,k}f1→2k+1,k​的值,然后用拉格朗日插值算出第nnn项即可。
代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int N=1005;
int A,f[N][N],inv[N],n,k,mod,ans=0;
typedef long long ll;
inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
int main(){scanf("%d%d%d",&A,&n,&mod);int lim=n*2+1;inv[1]=1;for(ri i=2;i<=lim;++i)inv[i]=mul(inv[mod-mod/i*i],mod-mod/i);f[0][0]=1;for(ri i=1;i<=lim;++i){f[i][0]=1;for(ri j=1;j<=n;++j)f[i][j]=add(f[i-1][j],mul(f[i-1][j-1],i));}for(ri mult,i=1;i<=lim;++i){mult=f[i][n];for(ri j=1;j<=lim;++j)if(i^j)mult=mul(mult,dec(A,j)),mult=mul(mult,(i>j?inv[i-j]:mod-inv[j-i]));ans=add(ans,mult);}for(ri i=1;i<=n;++i)ans=mul(ans,i);cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/10582405.html

2019.02.19 bzoj2655: calc(生成函数+拉格朗日插值)相关推荐

  1. 【BZOJ】2655: calc 动态规划+拉格朗日插值

    [题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...

  2. 某 SCOI 模拟赛 T3 s3mple【生成函数 拉格朗日插值】

    题意 对于序列 a a a,记 v i v_i vi​ 为位置距离 a i a_i ai​ 最近的.比 a i a_i ai​ 大的数与它的距离(假设 a 0 a_0 a0​ 和 a n + 1 a_ ...

  3. 洛谷 P4463 [集训队互测 2012] calc(拉格朗日插值优化DP)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P4463 Prob ...

  4. 吾尝终日而思矣——2019.02.19

    1.享元模式(Flyweight Pattern) 享元模式意在减少新对象的产生,为一个对象建立一个享元工厂类,一般包含一个HashSet容量池.使用工厂类创建新对象,当对象未创建过,创建新对象并存入 ...

  5. EOJ Monthly 2019.11 E. 数学题(反演 + 杜教筛 + 拉格朗日插值)

    EOJ Monthly 2019.11 ∑i=1n∑a1=1i∑a2=1i∑a3=1i⋯∑ak−1i∑aki[gcd(a1,a2,a3,-,ak−1,ak,i)==1]=∑i=1n∑d∣iμ(d)⌊i ...

  6. BZOJ2655 calc(动态规划+拉格朗日插值法)

    考虑暴力dp:f[i][j]表示i个数值域1~j时的答案.考虑使其值域++,则有f[i][j]=f[i][j-1]+f[i-1][j-1]*i*j,边界f[i][i]=i!*i!. 注意到值域很大,考 ...

  7. 洛谷P4463:calc(dp、拉格朗日插值)

    Solution\text{Solution}Solution 神奇题目. 首先可以强制所有的数递增,最后的答案乘一个 n!n!n! 即可. 设 dpi,jdp_{i,j}dpi,j​ 表示在 [1, ...

  8. 2019 ACM/ICPC 南昌站 G,拉格朗日插值

    题意: 求∑i=1t∑k=xyf(i,k)\sum^t_{i=1}\sum^y_{k=x}f(i,k)i=1∑t​k=x∑y​f(i,k) 其中f(i,k)f(i,k)f(i,k)表示1,2,3,.. ...

  9. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  10. P5667 拉格朗日插值2(拉格朗日插值,NTT, 倒推求逆元)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P5667 Prob ...

最新文章

  1. 实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密
  2. 后端系统开发之白名单机制
  3. python累加求和_python中的变量和数据类型(一)
  4. Python之路,day4-Python基础
  5. 测试一下你对IP地址的掌握水平(网管面试时会用到)
  6. 最详细的Mask R-CNN论文笔记
  7. Objective -C-2
  8. 2.JAVA-基础语法以及String的介绍
  9. 解决element el-pagination分页最后一页数据清空了页码显示正确,但是列表为空
  10. 过采样方法、欠采样介绍
  11. 代码远程调用aria2实现URL资源或BT种子下载
  12. ubuntu 或者虚拟机连接u盘
  13. 计算机网络上不去的原因是什么,路由器有信号却上不了网是什么原因?
  14. 宇视摄像头默认密码是多少
  15. 关于DBA的一些学习(一)
  16. 判断一个树是否为二叉查找树
  17. 本土程序员杀进硅谷的第一步---突破英语瓶颈
  18. Pt100转RS-485,热电阻温度Modbus数据采集模块 WJ125
  19. 版本管理工具使用之svn
  20. 软件:推荐七款实用的画流程图工具

热门文章

  1. linux上安装osg_如何在 Linux 上安装并启用 Flatpak 支持? | Linux 中国
  2. 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)
  3. 编译原理教程_4 语法分析
  4. 2022年考研计算机组成原理_6 总线
  5. 2022年考研计算机组成原理_5 中央处理器
  6. 新代数控系统编程说明书_数控加工中心编程快速入门教程
  7. java中rhino什么用_使用require.js和Java / Rhino解析模块
  8. Windows Driver开发_TraceEvents调试以及加载驱动的方法
  9. git 入门第二节 本地和远程仓库链接
  10. Lync 小技巧-26-由于服务器连接问题,一些演示功能不可用