题目描述

一个序列a1,...,an是合法的,当且仅当:
长度为给定的n。
a1,...,an都是[1,A]中的整数。
a1,...,an互不相等。
一个序列的值定义为它里面所有数的乘积,即a1a2...an。
求所有不同合法序列的值的和。
两个序列不同当且仅当他们任意一位不一样。
输出答案对一个数mod取余的结果。

题解

先考虑dp

我们设dp[i][j]表示前i个元素,已经填完了1~j的所有数字,它们的价值和是多少。

转移:dp[i][j]=dp[i][j-1]+dp[i-1][j-1]*j

第一维比较小,但第二维比较大,所以需要优化。

然后考虑dp[n]是一个x次多项式。

观察转移的形式,dp[i][j]-dp[i][j-1]=dp[i-1][j-1]*j

前面的是一个差分的形式,多项式的次数会-1。

G[n]-1=G[n-1]+1

又因为G[0]=1,所以x=2n

所以可以先求出2*n+1项,再上拉格朗日插值。

代码

#include<iostream>
#include<cstdio>
#define N 1009
using namespace std;
typedef long long ll;
int n,m,q;
ll mod,a[N],f[N][N],A;
inline ll rd(){
ll x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
inline ll power(ll x,ll y){
ll ans=;
while(y){
if(y&)ans=ans*x%mod;x=x*x%mod;y>>=;
}
return ans;
}
inline ll ni(ll x){return power(x,mod-);}
inline ll work(int x){
if(x<=m)return a[x];
ll ans=;
for(int i=;i<=m;++i){
ll res=a[i];
for(int j=;j<=m;++j){
if(j!=i)res=res*(x-j)%mod*ni(i-j)%mod;
}
res=(res+mod)%mod;
ans=(ans+res)%mod;
}
return ans;
}
int main(){
A=rd();n=rd();mod=rd();
m=n*+;
for(int i=;i<=m;++i)f[][i]=;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)f[i][j]=(f[i-][j-]*j%mod+f[i][j-])%mod;
for(int i=;i<=m;++i)a[i]=f[n][i];
ll ans=;
for(int i=;i<=n;++i)ans=ans*i%mod;
printf("%lld",ans*work(A)%mod);
return ;
}

BZOJ2655calc的更多相关文章

  1. bzoj2655calc 容斥+dp

    2655: calc Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 322  Solved: 197[Submit][Status][Discuss] ...

随机推荐

  1. [Java] 为什么字符串比较不能用两个等号(==)

    Java中,使用"=="比较字符串时,判断的是两个字符串是否存放在相同的位置.如果两个字符串存放在相同的位置,那么它们就是相同的,使用"=="比较的结果也就是T ...

  2. JavaScript常用代码书写规范

    javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 , y = ; c ...

  3. sql 服务启动失败 SQL Server(MSSQLSERVER) 错误码126

    SQL配置管理器-->sql server 网络配置-->mssqlerver的协议-->VIA禁用服务

  4. 微信小程序 canvas 文字自动换行

    Page({ drawCanvas: function(ctx) {// 地址 ctx.setFontSize() ctx.setFillStyle('#9E7240') ctx.textAlign= ...

  5. Jinja2用法总结

    Jinja2用法总结   一:渲染模版 要渲染一个模板,通过render_template方法即可. @app.route('/about/') def about(): # return rende ...

  6. SuperMap iServer 在Linux 部署中问题总结

    SuperMap iServer 作为超图公司的云GIS服务器产品,一般是部署在Linux服务器上.下面把日常部署和使用过程中遇到的相关问题做以汇总. 1.部署iServer的第一步是要检查Linux ...

  7. python使用rabbitMQ介绍二(工作队列模式)

    一模式介绍 第一章节的生产-消费者模式,是非常简单的模式,一发一收.在实际的应用中,消费者有的时候需要工作较长的时间,则需要增加消费者. 队列模型: 这时mq实现了一下几个功能: rabbitmq循环 ...

  8. 关于C#中的++运算符的一些拓展思考

    在刷LeetCode题库的时候,看到一个大神写的for循环是这样的 ;i<length;++i) { //dosomething } 其实最终的效果和 ;i<l;i++){} 是一样的. ...

  9. AI和机器学习对云应用的安全产生了何种影响?

    AI和机器学习对云应用的安全产生了何种影响? 正如其他许多新兴技术一样,AI是一把双刃剑,它对于云计算的安全影响是双重的:这项技术可以使工作负载变得更加安全,但也可能会为新的威胁打开大门. 出现这种分 ...

  10. CentOS7 升级 gvim 到 8.x 版本

    因为 CentOS7 在默认情况下,通过 yum 安装的 vim-X11.x86_64 版本为 7.x 版本,对 Youcompleteme 支持不好.故需要升级到 8.x 版本. 以下记录 gvim ...