首页 > 其他分享 >【OGF、Lucas】P4640 [BJWC2008] 王之财宝

【OGF、Lucas】P4640 [BJWC2008] 王之财宝

时间:2023-08-28 20:22:17浏览次数:48  
标签:BJWC2008 Lucas int res inv fac OGF rep define

显然,就是有一些的 OGF 为 \(\frac{1}{1 - x}\),有一些为 \(\frac{1 - x^{b_i + 1}}{1 - x}\)。乘起来即可。

发现不太好算分子,考虑枚举哪些算了。

然后我们考虑 \(2^t\) 的枚举子集。然后直接乘上对应的 \(b_i + 1\) 的系数即可。

然后我们要求分母第 \(i\) 位的系数,这个很典, \(i\) 个无标号元素放入,\(n\) 个有标号集合里的方案。直接插板即可。

\[\binom{n + i - 1}{i} \]

然后我们答案要对这个求 \(1 \to k\) 的前缀和,那么我们直接用典恒等式有:

\[\binom{n + k}{n} \]

然后我们对于这个直接用 Lucas 求即可。

#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i ++)
#define per(i, r, l) for (int i = r; i >= l; i --)
#define cpy(x, y, s) memcpy(x, y, sizeof(x[0]) * (s))
#define mem(x, k) memset(x, k, sizeof(x))
#define ll long long
#define int long long
// \yhx-12243/ 鱼大保佑!!

using namespace std;

const int _ = 1e6 + 5;

int power (int x, int y, int mod) {
	int res = 1;
	for ( ; y; x = x * x % mod, y >>= 1)
		if (y & 1) res = res * x % mod;
	return res;
}

int n, m, t, p, b[_];
int inv[_], fac[_], res;

int C (int n, int m) {
	return fac[n] * inv[m] % p * inv[n - m] % p;
}
int lucas (int n, int m) {
	if (n < m) return 0;
	if (n < p) return C(n, m);
	return lucas(n / p, m / p) * lucas(n % p, m % p) % p;
}
signed main () {
	cin >> n >> t >> m >> p;
	rep(i, 0, t - 1) cin >> b[i], b[i] ++;
	
	fac[0] = inv[0] = 1;
	rep(i, 1, p - 1) fac[i] = fac[i - 1] * i % p;
	rep(i, 1, p - 1) inv[i] = power(fac[i], p - 2, p);
	
	rep(i, 0, (1 << t) - 1) {
		int f = 1, sum = 0;
		rep(j, 0, t - 1) if ((i >> j) & 1) {
			sum += b[j], f = -f;
		} 
//		cout << i << " " <<  sum << " " << n + m - sum << " " << m - sum  << endl;
		(res += f * lucas(n + m - sum, m - sum)) %= p;
	}
	cout << (res + p) % p;
	return 0;
}

标签:BJWC2008,Lucas,int,res,inv,fac,OGF,rep,define
From: https://www.cnblogs.com/Custlo/p/17663295.html

相关文章

  • Lucas 定理
    组合意义天地灭。Lucas定理问题\(1\):给定\(n,m\in\mathbb{N}\)与\(p\in\mathbb{P}\),其中\(n\)与\(m\)相当大,而\(p\)则相对较小,要求计算\(\binom{n}{m}\bmodp\)的值。一般的预处理逆元以及递推的方法在\(n,m\)充分大时均会失效,我们需要新的工具来解决......
  • Lucas定理
    Lucas定理:主要是求$C_{n}^{m}$在模$p$情况下($mod\,p$)(一般$p$较小,而$n,m$较大的情况)公式:$C_{n}^{m}≡ C_{n\,mod\,p}^{m\,mod\,p}\timesC_{n/p}^{m/p} (mod\,p)$证明以后补吧就以这题来说明具体解法:题目LuoguP3807【模板】卢卡斯定理/Lucas定......
  • 【模板】数论基础:exGCD,exCRT,inverse,Lucas,BSGS,primitive root
    7.29数论WIP\(a\equivb\pmodp\Rightarrow\frac{a}{d}\equiv\frac{b}{d}\pmod{\frac{p}{d}},d=\gcd(a,b,p)\)。exGCD若\((a,b)=1\),则\(0\leqx<b\),\(ax\bmodb\)互不相同,有一个是\(1\)。证明:\(ax_1\equivax_2\pmodb\)则\((x_1-x_2)a|b\),因为......
  • Lucas 定理
    Lucas定理若\(p\)是质数,则对于任意整数\(1\leqm\leqn\),有:\[\dbinom{n}{m}\equiv\dbinom{n\modp}{m\modp}\times\dbinom{\dfrac{m}{p}}{\dfrac{n}{p}}\pmodp\]证明太难,略。例题\(1\):SP18878题目大意求杨辉三角第\(n\)行中偶数个数与奇数个数。题目分析我们......
  • 备库归档日志文件的删除测试——第二篇:valid_for参数为ONLINE_LOGFILES与STANDBY_LOGF
    文档课题:备库归档日志文件的删除测试——第二篇:valid_for参数为ONLINE_LOGFILES与STANDBY_LOGFILES.数据库:oracle11.2.0.4架构:rac(2节点)+dg(orcldg与sh_orcl)场景描述:在该架构中,orcldg备库作为sh_orcl备库归档日志文件的来源,现测试以下两点:a、归档日志文件从orcldg......
  • Luogu P4720 【模板】扩展卢卡斯定理/exLucas
    【模板】扩展卢卡斯定理/exLucas题目背景这是一道模板题。题目描述求\[{\mathrm{C}}_n^m\bmod{p}\]其中\(\mathrm{C}\)为组合数。输入格式一行三个整数\(n,m,p\),含义由题所述。输出格式一行一个整数,表示答案。样例#1样例输入#1533样例输出#11样例#2......
  • Lucas(卢卡斯定理)
    \(C^m_n\equivC^{m/p}_{n/p}*C^{m\mod\p}_{n\mod\p}\)首先,我们可以知道如下定理我们令\(n=ap+b\),\(m=cp+d\)则由二项式定理得\((1+x)^n\equiv\Sigma_{i=0}^nC^i_nx^i(mod\p)\)---------(1)由\(n=ap+b\)可知\((1+x)^n\equiv(1+x)^{......
  • 基于Lucas-Kanade算法的双目图像光流提取matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要        1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的......
  • 基于Lucas-Kanade算法的双目图像光流提取matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度。物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的连续变化的图像,这些变化信息在不同时间,不断的流过眼......
  • lucas定理 学习笔记
    lucas定理学习笔记目录lucas定理学习笔记介绍combination题目描述输入格式输出格式样例输入样例1输出样例2分析code扩展lucas介绍lucas定理用于解决形如\(C_n^m\modp(p\inprime)\)的问题。设\(n,m\)用\(p\)进制来表示为:\((n_an_{a-1}\cdotsn_0)_p,(m_am_{a-......