题目链接

BZOJ:https://www.lydsy.com/JudgeOnline/problem.php?id=2655

Solution

设\(f_i\)表示长度为\(i\)的序列个数,\(g_{i,x}\)表示含有\(x\)的序列个数,注意这里不考虑顺序,顺序答案直接乘\(n!\)就好了。

首先很显然可以得到:
\[ f_i=\frac{1}{n}\sum_{x=1}^{A}g_{i,x} \]
我们尝试向\(f_i\)中添加一个\(x\),可以得到:
\[ xf_i=xg_{i,x}+g_{i+1,x} \]
把这个式子变一下:
\[ g_{i,x}=xf_{i-1}-xg_{i-1,x} \]
注意到这是个递归的形式,可以得到:
\[ g_{n,x}=\sum_{i=1}^{n}(-1)^{i-1}x^if_{n-i} \]
根据第一个式子累和:
\[ f_n=\frac{1}{n}\sum_{i=1}^Ag_{n,x}=\frac{1}{n}\sum_{i=1}^{A}\sum_{j=1}^{n}(-1)^{j-1}i^{j}f_{n-j}=\frac{1}{n}\sum_{j=1}^{n}\left((-1)^{j-1}\sum_{i=1}^{A}i^j\right)f_{n-j} \]
注意中间是一个只和\(j\)有关的式子,我们可以插值做到\(O(n)\)算一次。

那么我们预处理中间,其他的爆算就好了,复杂度\(O(n^2)\)。

注意我代码偷懒多了个\(\log\),但是不影响。

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 600+10;
const int inf = 1e9;
const lf eps = 1e-8;int g[maxn],f[maxn],y[maxn],mod,fac[maxn],ifac[maxn],inv[maxn],suf[maxn],pre[maxn];int qpow(int a,int x) {int res=1;for(;x;x>>=1,a=1ll*a*a%mod) if(x&1) res=1ll*res*a%mod;return res;
}int power_sum(int n,int k) {fac[0]=ifac[0]=1;k+=2;for(int i=1;i<=k;i++) y[i]=(y[i-1]+qpow(i,k-2))%mod;for(int i=1;i<=k;i++) fac[i]=1ll*fac[i-1]*i%mod,ifac[i]=qpow(fac[i],mod-2);pre[0]=1;for(int i=1;i<=k;i++) pre[i]=1ll*pre[i-1]*(n-i)%mod;suf[k+1]=1;for(int i=k;i;i--) suf[i]=1ll*suf[i+1]*(n-i)%mod;int res=0;for(int i=1;i<=k;i++) res=(res+1ll*(((k-i)&1)?-1:1)*y[i]*pre[i-1]%mod*suf[i+1]%mod*ifac[i-1]%mod*ifac[k-i]%mod)%mod;   return (res+mod)%mod;
}int A,n;int main() {read(A),read(n),read(mod);for(int i=0;i<=n;i++) g[i]=((i&1)?1:-1)*power_sum(A,i);f[0]=1;int t=1;for(int i=1;i<=n;i++) {for(int j=1;j<=i;j++)f[i]=(f[i]+1ll*g[j]*f[i-j])%mod;f[i]=1ll*f[i]*qpow(i,mod-2)%mod;t=1ll*t*i%mod;}write((1ll*f[n]*t%mod+mod)%mod);return 0;
}

转载于:https://www.cnblogs.com/hbyer/p/10890702.html

[BZOJ2655] calc相关推荐

  1. 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!. 注意到值域很大,考 ...

  2. bzoj千题计划269:bzoj2655: calc (拉格朗日插值)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2655 f[i][j] 表示[1,i]里选严格递增的j个数,序列值之和 那么ans=f[A][n] * ...

  3. PKUSC2018训练日程(4.18~5.30)

    (总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...

  4. 拉格朗日插值法及应用

    拉格朗日插值法 一般方法 重心拉格朗日插值法 应用 bzoj4559:成绩比较 bzoj2655: calc bzoj3453:XLkxc 拉格朗日插值法 快速根据点值逼近函数 在取点大于nnn的情况 ...

  5. 【BZOJ2655】calc,dp+拉格朗日插值法

    传送门 思路: 好题 这个题目做法非常多,我知道的起码还有倍增法和预处理伯努利数 这里仅说一下我的想法 从原始dp的思路出发 f[i][j]表示i个元素中选取j个的分数 写出dp方程 f[i][j]= ...

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

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

  7. less里面calc() 语法

    转载 Less的好处不用说大家都知道,确实让写CSS的人不在痛苦了,最近我在Less里加入calc时确发现了有点问题,我在Less中这么写: div { width : calc(100% - 30p ...

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

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

  9. CSS的单位及css3的calc()及line-height百分比

    说在前面的话 阳历2014年已经离我们远去,2015年接踵而来.祝大家新年快乐!在新的一年,我将有新的蜕变!这是2015年的第一篇文章,写一篇关于css的单位的文章吧! 单位介绍 说到css的单位,大 ...

最新文章

  1. Eclipse导入项目常见问题----乱码问题03
  2. 世界云计算机公司,2019年全球云计算企业排行榜TOP50
  3. 逻辑回归(LR)个人学习总结篇
  4. 【Vue】—插槽的基本语法
  5. MIT博士小姐姐的机器学习入门教程开课!碎片时间服用,每周一更 | 资源
  6. ElementUI:路由界面刷新后导航栏仍显示default-active不跟随路由变化
  7. 苹果安卓最新看片神器各种实用功能,帮你一年省下上千块!
  8. 计算机新功能,利用win7新功能提升工作效率
  9. 测试微信好友是否删除软件,如何测试微信好友是否删了你?
  10. 北大计算机科学系 97届,北大一专业:六代单传、一人旷课全系放假,毕业照只有一个人...
  11. linux nvme命令,Linux command – nvme format
  12. 整理Ubuntu 14.04 Indicators 以及好的软件
  13. 炸!微信Windows版可以刷朋友圈了
  14. IOCTL 获取网络信息(Ethtool工具)
  15. 值得一看的网络课程推荐(不限于计算机科学)
  16. I-P-B frame简介
  17. hadoop启动缺少NameNode, 缺少ResourceManager, 缺少NodeManager
  18. 修改autor后面邮箱_最后冲刺!2020年国自然标书终极修改和形式审查要点!!!...
  19. vue webRTC播放海康摄像头实时画面延迟1s内
  20. 2019.2.20《菜根谭》洪应明 明朝

热门文章

  1. 计算机仿真在电力领域的应用,仿真技术在电力系统中的应用实例
  2. 巨一自动化工业机器人_工业机器人和自动化设备连接器
  3. 华为java 优招面试题_2017华为优招笔试题
  4. ubuntu安装mysql5.7.17_ubuntu 16.04安装mysql-server_5.7.17
  5. python云计算主要是干嘛的_国内python 云计算是干什么的
  6. windows上配置nginx php,Windows下配置Nginx使之支持PHP
  7. java ssm框架登录代码,求一个SSM框架登录功能的源码,要求能运行成功
  8. 江西省计算机应用基础对口高考复习,江西省对口高考计算机应用基础复习题(各章及综合练习)...
  9. orderd mysql_Oracle入门教程:leading vs ordered hint
  10. php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件