calc BZOJ 2655
calc
【问题描述】
一个序列a1,...,an是合法的,当且仅当:
长度为给定的n。
a1,...,an都是[1,A]中的整数。
a1,...,an互不相等。
一个序列的值定义为它里面所有数的乘积,即a1a2...an。
求所有不同合法序列的值的和。
两个序列不同当且仅当他们任意一位不一样。
输出答案对一个数mod取余的结果。
【输入格式】
一行3个数,A,n,mod。意义为上面所说的。
【输出格式】
一行结果。
【样例输入】
9 7 10007
【样例输出】
3611
HINT
【数据规模】
0:A<=10,n<=10。
1..3:A<=1000,n<=20。
4..9:A<=10^9,n<=20。
10..19:A<=10^9,n<=500。。
全部:mod<=10^9,并且mod为素数,mod>A>n+1。
题解:
设 f[i][j] 为用不大于A的数组成的有序合法序列方案数
转移方程:(是否选取 i 这个数字)

题目要求无序,那么最后乘上 n! 即可
细心观察一小下,发现它是一个有 2n 项的多项式
用拉格朗日插值法:

#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long lo;
inline int Get()
{
int x;
char c;
bool o = false;
while((c = getchar()) < '' || c > '')
if(c == '-') o = true;
x = c - '';
while((c = getchar()) >= '' && c <= '')
x = x * + c - '';
return (o) ? -x : x;
}
const int maxn = ;
int f[maxn][maxn];
int fac[maxn];
int x[maxn], y[maxn];
int a, n, m, mo;
int z, v, ans;
int num;
inline void Dp()
{
f[][] = ;
for(int i = ; i <= m; ++i)
for(int j = ; j <= n; ++j)
{
f[i][j] = f[i - ][j];
if(j) f[i][j] += (lo) f[i - ][j - ] * i % mo;
if(f[i][j] >= mo) f[i][j] -= mo;
}
}
inline void Fac()
{
fac[] = ;
for(int i = ; i <= n; ++i) fac[i] = (lo) fac[i - ] * i % mo;
}
inline void Sun()
{
num = ;
for(int i = ; i <= m; ++i)
if(f[i][n])
{
x[++num] = i, y[num] = f[i][n];
if(num == (n << | )) return;
}
}
inline int Mod(int x)
{
if(x < ) x += mo;
return x;
}
inline int Pow(int x, int n)
{
int sum = ;
while(n)
{
if(n & ) sum = (lo) sum * x % mo;
x = (lo) x * x % mo;
n >>= ;
}
return sum;
}
int main()
{
a = Get(), n = Get(), mo = Get();
m = n << ;
Dp();
Fac();
if(m >= a)
{
printf("%d", (lo) f[a][n] * fac[n] % mo);
return ;
}
Sun();
z = ;
for(int i = ; i <= num; ++i) z = (lo) z * Mod(a - x[i]) % mo;
for(int i = ; i <= num; ++i)
{
v = Mod(a - x[i]);
for(int j = ; j <= num; ++j)
if(i != j)
v = (lo) v * Mod(x[i] - x[j]) % mo;
ans = ans + (lo) y[i] * z % mo * Pow(v, mo - ) % mo;
if(ans >= mo) ans -= mo;
}
printf("%d", (lo) ans * fac[n] % mo);
}
calc BZOJ 2655的更多相关文章
- bzoj 2655: calc [容斥原理 伯努利数]
2655: calc 题意:长n的序列,每个数\(a_i \in [1,A]\),求所有满足\(a_i\)互不相同的序列的\(\prod_i a_i\)的和 clj的题 一下子想到容斥,一开始从普通容 ...
- BZOJ 2655 calc (组合计数、DP、多项式、拉格朗日插值)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2655 题解 据说有一种神仙容斥做法,但我不会. 以及貌似网上大多数人的dp和我的做法都不 ...
- BZOJ.2655.calc(DP/容斥 拉格朗日插值)
BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...
- bzoj 2655 calc——拉格朗日插值
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先考虑DP.dp[ i ][ j ]表示值域为 i .选 j 个值的答案,则 dp[ ...
- bzoj 2655 calc —— 拉格朗日插值
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先设 f[i][j] 表示长度为 i 的序列,范围是 1~j 的答案: 则 f[i][ ...
- [BZOJ 2655]calc
Description 题库链接 给出 \(A,n,p\) ,让你在模 \(p\) 意义下求所有序列 \(a\) 满足"长度为 \(n\) 且 \(a_i\in[1,A]\) ,并且对于 \ ...
- BZOJ 2655: calc(拉格朗日插值)
传送门 解题思路 首先比较容易能想到\(dp\),设\(f[i][j]\)表示前\(j\)个数,每个数\(<=i\)的答案,那么有转移方程:\(f[i][j]=f[i-1][j-1]*i*j+f ...
- [总结]其他杂项数学相关(定理&证明&板子)
目录 写在前面 一类反演问题 莫比乌斯反演 快速莫比乌斯变换(反演)与子集卷积 莫比乌斯变换(反演) 子集卷积 二项式反演 内容 证明 应用举例 另一形式 斯特林反演 第一类斯特林数 第二类斯特林数 ...
- 【BZOJ】2655: calc 动态规划+拉格朗日插值
[题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...
随机推荐
- Codeforces Round #316 (Div. 2) B Simple Game 贪心
贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况 #include<bits/stdc++.h> using namespa ...
- WPF中的TextBlock处理长字符串
Xaml: <StackPanel> <TextBlock Margin="10" Foreground="Red"> This is ...
- 插入函数概念 接收一个callback,然后外面函数,接一个对象,和一个next,外面都执行完了,继续执行下一个函数,相当于一个链状体,插入了一个函数的概念 | log4js 输出 等于 console.info
插入函数概念 接收一个callback,然后外面函数,接一个对象,和一个next,外面都执行完了,继续执行下一个函数,相当于一个链状体,插入了一个函数的概念 app.use(function (ctx ...
- eclipse 在写XML时 包类名自动提醒的问题
需要加一个STS插件 配置很简单 参考了 https://blog.csdn.net/HH775313602/article/details/70176531 在 https://spring.io ...
- 玩4K必备知识:HDMI1.4、2.0、2.0a、2.0b接口参数对比【扫盲贴】
https://www.4k123.com/thread-55369-1-1.html 前言:玩4K的同学都知道,HDMI接口是视频传输最常用的接口,但是这个接口却有好几个版本HDMI1.4.HDMI ...
- WPF显示尺寸与设备无关问题
WPF单位 WPF窗口以及其中的所有元素都是用与设备无关的单位进行度量.一个与设备无关的单位被定义为1/96英寸.WPF程序统一用下面一个公式来定义物理单位尺寸: [ 物理单位尺寸(像素)] = [ ...
- Bootstrap 网格系统(Grid System)实例2
Bootstrap 网格系统(Grid System):堆叠水平,两种样式 <!DOCTYPE html><html><head><meta http-equ ...
- Docker存储和网络
Docker存储资源类型 docker两种存储资源类型 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到 ...
- 03005_Tomcat
1.Tomcat下载 (1)Tomcat解压版:链接:Tomcat解压版 密码:0iw0 : (2)源码:链接:源码 密码:3o43 . 2.Tomcat的目录结构 (1)bin:脚本目录 ①启动 ...
- 本机机器ssh docker容器
https://blog.csdn.net/u010324465/article/details/77184506 1.在docker中安装openssh-server 2.sudo /etc/ini ...