Description

题库链接

给出 \(A,n,p\) ,让你在模 \(p\) 意义下求所有序列 \(a\) 满足“长度为 \(n\) 且 \(a_i\in[1,A]\) ,并且对于 \(i\neq j,a_i\neq a_j\)”的价值和。

一个序列的价值定义为 \(\prod\limits_{i=1}^n a_i\) 。

\(1\leq A\leq 10^9,1\leq n\leq 500,p\leq 10^9\) 并且 \(p\) 为素数, \(p>A>n+1\) 。

Solution

考虑朴素的 \(\text{DP}\) 。

记 \(f_{i,j}\) 为长度为 \(j\) 的序列只含 \([1,i]\) 内的数的价值。

转移是考虑是否加上 \(i\) 这个元素并且如果加上放在哪一位,那么

\[f_{i,j}=f_{i-1,j-1}\times j\times i+f_{i-1,j}\]

这样转移是 \(O(An)\) 的,过不了...

据说 \(f_{i,j}\) 是一个关于 \(i\) 有关的 \(2j\) 次的多项式。

具体证明的话,可以差分之后用数学归纳法来证。

那么我们考虑 \(\text{DP}\) 出 \(f_{i,n},i\in[0,2n]\) 的值,用拉格朗日插值求出唯一解即可...

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 1000+5; int f[N][N], a, n, p, x[N], y[N], ifac[N], inv[N]; int quick_pow(int a, int b) {
int ans = 1;
while (b) {
if (b&1) ans = 1ll*ans*a%p;
b >>= 1, a = 1ll*a*a%p;
}
return ans;
}
int lagrange(int n, int *x, int *y, int xi) {
int ans = 0, s1 = 1;
for (int i = 0; i <= n; i++) {
s1 = 1ll*s1*(xi-x[i])%p;
inv[i] = quick_pow(xi-x[i], p-2);
}
ifac[1] = ifac[0] = 1;
for (int i = 2; i <= n; i++) ifac[i] = -1ll*p/i*ifac[p%i]%p;
for (int i = 2; i <= n; i++) ifac[i] = 1ll*ifac[i]*ifac[i-1]%p;
for (int i = 0; i <= n; i++)
(ans += 1ll*y[i]*s1%p*inv[i]%p*ifac[i]%p*(((n-i)&1) ? -1 : 1)*ifac[n-i]%p) %= p;
return (ans+p)%p;
}
void work() {
scanf("%d%d%d", &a, &n, &p);
for (int i = 0; i <= n*2; i++) f[i][0] = 1;
for (int i = 1; i <= n*2; i++)
for (int j = 1; j <= n; j++)
f[i][j] = (1ll*f[i-1][j-1]*i%p*j%p+f[i-1][j])%p;
if (a <= 2*n) {printf("%d\n", f[a][n]); return; }
for (int i = 0; i <= 2*n; i++) x[i] = i, y[i] = f[i][n];
printf("%d\n", lagrange(2*n, x, y, a));
}
int main() {work(); return 0; }

[BZOJ 2655]calc的更多相关文章

  1. bzoj 2655: calc [容斥原理 伯努利数]

    2655: calc 题意:长n的序列,每个数\(a_i \in [1,A]\),求所有满足\(a_i\)互不相同的序列的\(\prod_i a_i\)的和 clj的题 一下子想到容斥,一开始从普通容 ...

  2. BZOJ 2655 calc (组合计数、DP、多项式、拉格朗日插值)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2655 题解 据说有一种神仙容斥做法,但我不会. 以及貌似网上大多数人的dp和我的做法都不 ...

  3. BZOJ.2655.calc(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...

  4. bzoj 2655 calc——拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先考虑DP.dp[ i ][ j ]表示值域为 i .选 j 个值的答案,则 dp[ ...

  5. bzoj 2655 calc —— 拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先设 f[i][j] 表示长度为 i 的序列,范围是 1~j 的答案: 则 f[i][ ...

  6. BZOJ 2655: calc(拉格朗日插值)

    传送门 解题思路 首先比较容易能想到\(dp\),设\(f[i][j]\)表示前\(j\)个数,每个数\(<=i\)的答案,那么有转移方程:\(f[i][j]=f[i-1][j-1]*i*j+f ...

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

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

  8. calc BZOJ 2655

    calc [问题描述] 一个序列a1,...,an是合法的,当且仅当: 长度为给定的n. a1,...,an都是[1,A]中的整数. a1,...,an互不相等. 一个序列的值定义为它里面所有数的乘积 ...

  9. bzoj 2566 calc 拉格朗日插值

    calc Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 377  Solved: 226[Submit][Status][Discuss] Descr ...

随机推荐

  1. Excel中使用VBA进行度分秒与十进制度的转换

    发现Excel的VBA功能真是批量处理的一把利刃,工作中小试牛刀了一把,将Excel中度分秒形式的坐标批量处理成十进制度形式,处理完后用于GIS展点制图. 原Excel数据如下: VBA代码如下: S ...

  2. Sql Server 2008 压缩数据库日志文件

    第一步:将数据库设置为简单模式 选中数据库点右键->属性: 第二步:收缩数日志文件 1, 2,   第三步:将恢复模式改回为完整模式     如果你觉得用UI界面麻烦,那你就用SQL语句吧   ...

  3. JQuery fullcalender文档

    转载: http://blog.csdn.net/lgg2011. 使用方式, 引入相关js, css后, $(‘#div_name’).fullCalendar({//options});  接受的 ...

  4. AbpZero的Swagger汉化之旅

    做汉化主要是为了出一份前后端都能看得懂的在线文档,废话不多说,我们开始准备, 我们要在启动项目的Startup.cs中重定向一下swagger的读取方式 1.在这个类下面,新增一个方法: public ...

  5. monoDB环境搭建

    最近看到有部分人MongoDB安装之后总是启动不起来,在这里,写了一个简单的搭建教程 直接进入正题 1.mongoDB下载地址 https://www.mongodb.org/downloads#pr ...

  6. 3-WIN10系统及开发工具支持

    本篇博客对应视频讲解 回顾 上一讲说了编程的方向和技术流派以及选择入门语言的建议.当我们决定我们的选择之后呢,我们就要学习和进行实践操作了.但在实践之前,我们仍然需要做好相应的准备,这也就是今天要讲的 ...

  7. 企业项目开发--本地缓存guava cache(1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.在实际项目开发中,会使用到很多缓存技术,而且数据库的设计一般也会依赖于有缓存的情况下设计. 常用的缓存分 ...

  8. odoo:开源ERP/安装和初始设置

    1.1 Odoo的结构 Odoo使用Web浏览器来访问Odoo服务,因此你的Odoo服务器可以部署在较远的地方(如另外一个城市),用户的计算机上只需安装谷歌.火狐或 IE9 以上的浏览器,所以Web客 ...

  9. day 60 Django第一天

    jinjia2 : Jinja2是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker和velocity. 它能完全支持unicode,并具有集成的沙箱执行 ...

  10. 程序媛计划——python正则表达式

    #定义 正则表达式是对字符串操作的一种逻辑公式,通过它我们能筛选过滤出我们需要的内容,如判断一串数字是否是电话号码. #原理 先把正则表达式的字符串转换成 Pattern 对象,接着用这个对象处理文本 ...