BZOJ2655calc

时间:2022-09-26 08:43:23

题目描述

一个序列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 容斥&plus;dp

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

随机推荐

  1. 如何发布一个Mac应用并使其成为全球付费榜第一

    Readdle公司如何发布第一个 Mac App,并使之成为Mac App Store 全球付费排名第一的 Easy注:自从发布了<程序员如何优雅的挣零花钱?>后,就不断有同学询问怎么做A ...

  2. Delphi的TListView控件拖放选定行操作

    http://www.tansoo.cn/?p=401 Delphi的TListView控件拖放选定行操作的例子,效果图如下:TListView控件拖动选定行到指定位置 具体实现步骤: 一.新建一个D ...

  3. Linux下Crontab的格式及含义

    crontab的基本格式: f1 f2 f3 f4 f5 command 分 时     日 月 周 命令 第一列f1代表分钟1~59:当f1为*表示每分钟都要执行:为*/n表示每n分钟执行一次:为a ...

  4. &lpar;转载&rpar;SVM-基础&lpar;二&rpar;

    支持向量机: Support Vector  by pluskid, on 2010-09-10, in Machine Learning     52 comments 本文是"支持向量机 ...

  5. block的那些事(从懵懂到使用)

    从大学开始自学iOS,在iOS岗位已经两年了,遇到传值等操作,代理和block二选一的话,以前我会毫不犹豫选择代理.久而久之,入职到大公司之后,发现处处是block的天地,才慢慢的了解block并爱上 ...

  6. iOS中 CoreGraphics快速绘图&lpar;详解&rpar; 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...

  7. 磁盘异步I &sol; O在Windows上显示为同步

    概要 Microsoft Windows上的文件I / O可以是同步或异步的.I / O的默认行为是同步的,其中调用I / O函数并在I / O完成时返回.异步I / O允许I / O函数立即将执行返 ...

  8. ABBYY OCR技术教电脑阅读缅甸语(上)

    缅甸联邦*,原名缅甸,是东南亚的一个国家,从1962年到2010年,缅甸一直被政变后上台的军*统治,直至最近5年它才对外界开放,与其他国家建立了贸易与文化联系. 缅甸语由很多方言组成,但所有方言 ...

  9. odoo开发笔记 -- 用户配置界面如何增加模块访问权限

    在odoo设置界面,点击用户,进入用户配置界面,会看到: 访问权 | 个人资料菜单 在访问权 page菜单界面,可以看到系统预制的一些模块都会显示在这里, 那么,我们自己开发的模块如何显示在这块呢,从 ...

  10. Swagger&plus;IdentityServer4测试授权验证

    1.Bearer授权操作,添加如下代码 services.AddSwaggerGen(options => { options.AddSecurityDefinition("Beare ...

相关文章