P2183 [国家集训队]【一本通提高组合数学】礼物

Procedural modeling What is procedural modeling? One content generation option is modeling buildings, plants, clouds, cities, and worlds using an underlying system of rules. 1 Procedural Modeling: Grammars A rule-based generative system loosely organized as: ... 阅读详情

[国家集训队]礼物

题目背景

一年一度的圣诞节快要来到了。每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物。不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会越多。

题目描述

小 E 从商店中购买了 n n n 件礼物,打算送给 m m m 个人,其中送给第 i i i 个人礼物数量为 w i w_i wi​。请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某个人在这两种方案中收到的礼物不同)。由于方案数可能会很大,你只需要输出模 P P P 后的结果。

输入格式

输入的第一行包含一个整数 P P P,表示模数。
第二行包含两个整数 n n n 和 m m m,分别表示小 E 从商店购买的礼物数和接受礼物的人数。
第 3 3 3 到第 ( m + 2 ) (m + 2) (m+2) 行,每行一个整数,第 ( i + 2 ) (i + 2) (i+2) 行的整数 w i w_i wi​ 表示送给第 i i i 个人的礼物数量。

输出格式

若不存在可行方案,则输出 Impossible,否则输出一个整数,表示模 P P P 后的方案数。

输入输出样例

样例输入1
100
4 2
1
2
样例输出1
12
样例输入2
100
2 2
1
2
样例输出2
Impossible

说明/提示

样例 1 解释

以 / 分割,/ 前后分别表示送给第一个人和第二个人的礼物编号。 12 12 12 种方案详情如下:

1/2 3   1/2 4   1/3 4
2/1 3   2/1 4   2/3 4
3/1 2   3/1 4   3/2 4
4/1 2   4/1 3   4/2 3

数据规模与约定

设 P = ∏ i = 1 t p i c i P= \prod_{i=1}^t p_i^{c_i} P=∏i=1t​pici​​, p i p_i pi​ 为质数。

对于 15 % 15\% 15% 的数据, n ≤ 15 n\leq 15 n≤15, m ≤ 5 m\leq 5 m≤5, p i c i ≤ 1 0 5 p_i^{c_i}\leq 10^5 pici​​≤105。

在剩下的 85 % 85\% 85% 数据中,约有 60 % 60\% 60% 的数据满足 t ≤ 2 t\leq 2 t≤2, c i = 1 c_i=1 ci​=1, p i ≤ 1 0 5 p_i\leq 10^5 pi​≤105,约有 30 % 30\% 30% 的数据满足 p i ≤ 200 p_i\leq 200 pi​≤200。

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 9 1\leq n\leq 10^9 1≤n≤109, 1 ≤ m ≤ 5 1\leq m\leq 5 1≤m≤5, 1 ≤ p i c i ≤ 1 0 5 1\leq p_i^{c_i}\leq 10^5 1≤pici​​≤105, 1 ≤ w i ≤ P ≤ 1 0 9 1\leq w_i \leq P\leq 10^9 1≤wi​≤P≤109。

Code

#include <bits/stdc++.h>
#define int long long
using namespace std;
int w[10005];
int p, n, m, s, k = 1;

void exgcd(int a, int b, int &x, int &y)
{
	if (b)
	{
		exgcd(b, a % b, y, x);
		y -= a / b * x;
	}
	else
		x = 1, y = 0;
}

int inv(int a, int p)
{
	int x, y;
	exgcd(a, p, x, y);
	return (x + p) % p;
}

int qmi(int a, int b, int p)
{
	int res = 1;
	while (b)
	{
		if (b & 1)
			res = res * a % p;
		a = a * a % p;
		b >>= 1;
	}
	return res;
}

int f(int a, int p, int k)
{
	if (!a)
		return 1;
	int i, u = 1, v = 1;
	for (i = 1; i < k; ++i)
		if (i % p)
			u = i * u % k;
	for (i = a / k * k; i <= a; ++i)
		if (i % p)
			v = i % k * v % k;
	return f(a / p, p, k) * qmi(u, a / k, k) % k * v % k;
}

int g(int a, int p)
{
	if (a < p)
		return 0;
	return g(a / p, p) + a / p;
}

int h(int a, int b, int p, int k)
{
	return f(a, p, k) * inv(f(b, p, k), k) % k * inv(f(a - b, p, k), k) % k * qmi(p, g(a, p) - g(b, p) - g(a - b, p), k) % k;
}

int exlucas(int a, int b, int p)
{
	int i, j, k, l, s = 0;
	for (i = 2, j = p; i * i <= j; ++i)
	{
		if (j % i)
			continue;
		for (k = i, j /= i; !(j % i); k *= i)
			j /= i;
		l = p / k;
		s = (s + l * h(a, b, i, k) % p * inv(l, k)) % p;
	}
	if (j > 1)
	{
		l = p / j;
		s = (s + l * h(a, b, j, j) % p * inv(l, j)) % p;
	}
	return s;
}

signed main()
{
	cin >> p >> n >> m;
	for (int i = 0; i < m; ++i)
	{
		cin >> w[i];
		s += w[i];
	}
	if (s > n)
	{
		puts("Impossible");
		return 0;
	}
	for (int i = 0; i < m; ++i)
	{
		k = k * exlucas(n, w[i], p) % p;
		n -= w[i];
	}
	cout << k;
	return 0;
}

广告

绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/

绿树智能 - 官方网站:https://wangping-lvshu.github.io/LvshuZhineng/

(现在使用,人人均可获得300元大奖)

Statistics and Machine Learning Toolbox Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具 立即下载

相关推荐

手把手教你搭建离线语音助手:FunASR+DeepSeek+TTS保姆级教程

本文详细介绍了如何利用FunASR、DeepSeek和TTS技术搭建离线语音助手系统。从环境配置、模型部署到唤醒词检测优化、语音识别与语义理解联调,再到语音合成与系统集成,提供全链路实战教程。特别适合智能家居控制、企业内部知识问答等需要数据隔离的场景,实现高响应、低延迟的离线语音交互体验。

weixin_30316097的博客 475

【一本通提高组合数学】 计算系数(NOIP2011提高组)

【一本通提高组合数学】 计算系数(NOIP2011提高组)

绿树公司的博客 706

基于 LSTM 的船舶轨迹预测,单步预测

基于 LSTM 的船舶轨迹预测,单步预测

fyuhao的博客 1万+

《信息学奥赛一本通提高篇》第6章 组合数学

例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-优快云博客 「NOIP2011」 计算系数 - 组合数_TbYangZ的博客-优快云博客 一本通1648【例 1】「NOIP2011」计算系数 - 人间不值の - 博客园 例2 2^k进制数(NOIP2006提高) 信息学奥赛一本通(C++版)在线评测系统 一本通1649【例 2】2^k 进制数 - 人间不值の - 博客园 例3 组合 信息学奥赛一

青少年趣味编程 1299

【Azure 架构师学习笔记】- Azure Private Endpoint

公有云的其中一个特点是默认允许公网访问, 这就对企业环境带来风险,也是很多年前企业对公有云抵触的其中一个原因,现在这类问题已经很少,因为有了很多技术来确保云上的资源被安全地访问。其中Private endpoint(PE)就起到了很重要的作用。云上的某个资源如VM会创建在特定的网络(VNet/Subnet)上, 而其他如Storage Account , Azure SQL等PaaS服务则没有。如果你需要用VM 来访问这些PaaS资源,VM 就会通过资源的公网IP 来访问。

MVP黄钊吉(發糞塗牆) 1790

Vmware 17保姆级教程:从零部署华为enspPro模拟器(附镜像下载+配置优化)

本文提供了一份详尽的Vmware 17部署华为eNSP Pro模拟器的保姆级教程。内容涵盖从镜像下载、虚拟机导入、网络配置到深度性能调优的全过程,并针对常见启动失败、设备卡顿等故障提供了实用的排查方案,旨在帮助网络工程师和华为认证备考者快速搭建稳定高效的实验环境。

arduino9maker的博客 636

LOJ - 10235. 「一本通 6.6 练习 6」序列统计(组合数学+Lucas定理)

题目大意 给定三个正整数 N,L,RN, L, RN,L,R,统计长度在 111 到 NNN 之间,元素大小都在 LLL 到 RRR 之间的单调不降序列的数量。输出答案对 1e6+31e6 + 31e6+3 取模的结果。 解题思路 假设是从 nnn 个数中选出 mmm 个数,套用经典的计数模型: 若组成单调递增序列,当我们选择了第一个数的时候,后面有 n−1n - 1n−1 种选择,选择第二个数的时候,后面有 n−2n - 2n−2 种选择…这样最终的方案数目是 n∗(n−1)∗...∗(n−m+1..

Happig的博客 1000

NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver. 最全解决方案!详细!

真的折磨了我整整一天,从网上的资料到GPT都翻遍了,终于是解决了!以下方案希望能帮助到你们。

weixin_44124632的博客 1万+

问题 A: 【一本通提高组合数学】Bullcow 牡牛和牝牛

这道题明显是组合数的题目,但对于组合数的考察还是比较灵活,网上有一篇博客里讲的比较清楚 //此题还是比较灵活,对于组合数模型的转化最为重要 #include<stdc++.h> using namespace std; int n,k; long long mod=5000011; long long ksm(long long a,long long b){...

weixin_33994444的博客 304

在Keil下完成一个汇编程序的编写

在学习STM32的路上开始是学的C语言尚未进行对汇编进行学习,因此抽出时间来学习一下在keil下的汇编语言。

Liu-FE的博客 1万+

告别硬编码!用Aviator 5.3.3实现动态规则引擎,Spring Boot项目实战教程

本文详细介绍了如何使用Aviator 5.3.3在Spring Boot项目中实现动态规则引擎,告别硬编码。通过Maven依赖集成、规则模型设计、规则执行引擎实现及电商促销系统实战案例,展示了Aviator在动态规则配置中的高效应用,提升业务灵活性和开发效率。

weixin_30329623的博客 446

[luogu P2183] [国家集训队]礼物 {exlucas}

题目 https://www.luogu.org/problem/P2183 解题思路 本题求的是Cnw1∗Cn−w1w2∗..∗Cn−∑i=1m−1wiwm\large C_{n}^{w_1}*C_{n-w_1}^{w_2}*..*C_{n-\sum_{i=1}^{m-1}w_i}^{w_m}Cnw1​​∗Cn−w1​w2​​∗..∗Cn−∑i=1m−1​wi​wm​​ 无解的话,显然是要送的...

Nowed 348

科研绘图系列:R语言绘制世界地图数据分布(world map)

科研绘图系列:R语言绘制世界地图数据分布(world map)

专注生信领域 527

P2183 [国家集训队]礼物

白嫖白嫖

Ajwallet 504

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

洛谷-2183 [国家集训队]礼物

题目描述 一年一度的圣诞节快要来到了。每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物。不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多。小E从商店中购买了n件礼物,打算送给m个人,其中送给第i个人礼物数量为wi。请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某个人在这两种方案中收到的礼物不同)。由于方案数可能会很大,你只需要输出模P后的结...

mkopvec的博客 232

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【拓展卢卡斯】LuoGu P2183 [国家集训队]礼物

这是一道CTSC水题 题目描述 一年一度的圣诞节快要来到了。每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物。不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多。小E从商店中购买了n件礼物,打算送给m个人,其中送给第i个人礼物数量为wi。请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某个人在这两种方案中收到的礼物不同)。由于方案数...

bangzuan5029的博客 129

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Luogu P2183 [国家集训队]礼物 扩展卢卡斯+组合数

好吧学长说是板子。。。学了之后才发现就是板子qwq 题意:求$ C_n^{w_1}*C_{n-w_1}^{w_2}*C_{n-w_1-w_2}^{w_3}*...\space mod \space P$ 当然,如果$\Sigma w_i >n$,则无解。 (不会扩展卢卡斯?) #include<cstdio> #include<iostream&...

183

[国家集训队] 礼物

洛谷 P2183 传送门 bzoj 2142 传送门 一共n个礼物,分给m个人,每个人分wi个。 如果不够分,当然是Impossible。 如果够分,考虑求出1-n的所有排列,然后前w1个分给第一个人,w2个分给第二个人...... 剩下的那些,当做分给了第m+1个人。 这样共有 n! 种排列。 但是每个人(包括第m+1个)分到的礼物只要本质一样就行,排列顺序无所谓。 所以我们再除...

weixin_30877181的博客 179

洛谷 P2183 [国家集训队]礼物

题目描述 一年一度的圣诞节快要来到了。每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物。不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多。小E从商店中购买了n件礼物,打算送给m个人,其中送给第i个人礼物数量为wi。请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某个人在这两种方案中收到的礼物不同)。由于方案数可能会很大,你只需要输出模P后的结...

weixin_30877493的博客 137

Luogu2183【国家集训队】礼物

题面 题解 易得答案为 $$ \sum_{i=1}^m\binom{n-\sum_{j=1}^{i-1}w_j}{\sum_{j=1}^iw_j} $$ 扩展$\text{Lucas}$即可 代码 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm&...

weixin_30838873的博客 84

[国家集训队]礼物

Description Luogu2183 BZOJ2142 Solution 我们可以想象成把这\(n\)件物品排成一个排列,然后第1个人拿前\(w_1\)个,第2个人拿之后的\(w_2\)个,以此类推。由于每个人拿到的东西的是没有顺序的,还要在方案数上除掉\(w_i!\),别忘了剩下的物品其实也是没有顺序的,也要除以它们的阶乘。所以答案就是\(\dfrac{n!}{(n - \sum_iw_i...

weixin_33835103的博客 113

洛谷P2183 [国家集训队]礼物 [扩展lucas,中国剩余定理]

先放链接 第一道教练没要求而自己去做的的[扩展lucas,中国剩余定理]题,激动٩(๑&gt;◡&lt;๑)۶ 今天模拟赛考了一道[扩展lucas,中国剩余定理]的裸题,但我从来没写过,也没学过,很气 于是晚上发愤图强学习了一下,发现是个好东西。U盘里又有新模板啦哈哈哈 哎,跑远了 回归正题,[扩展lucas,中国剩余定理]这东西是用来求大组合数膜大合数的。注意是合数,那么普通lucas...

p_b_p_b的博客 399

Lucas定理学习记录

序言 晚上的时间真的是不会利用…… 和李某学习了很多积极向上的内容…… 维基百科可以查到好~多~积极向上的内容……是学习(FuBai)的好工具! 前排膜拜百科 维基百科 百度百科 前排预警:这篇Blog没有任何公式!绝对没有公式! Lucas Theorem 现给出公式:Cmn≡Cm/pn/p⋅Cmmodpnmodp(modp)Cnm≡Cn/pm/p⋅Cnmodpmmod...

打工是不可能打工的,这辈子不可能打工的。 330

每周记录(4月底停更了qvq)

1月6日 旋转卡壳 闵可夫斯基和 1月13日 期末复习 1月20日 网络流前4道题 一场失败的期末考试 写寒假作业 bzoj [HNOI2008]明明的烦恼(90分) prufer序列 正睿 画画图 树型dp 1月27日 后缀自动机SAM复习 正睿19冬令营&省选线上集训附加赛2 改错: T1 树型dp 多组数据没有init & 转移方程有误 int gcd(int x...

436

每周记录

1月6日 旋转卡壳 闵可夫斯基和 1月13日 期末复习 1月20日 网络流前4道题 一场失败的期末考试 写寒假作业 bzoj [HNOI2008]明明的烦恼(90分) 1月27日 后缀自动机SAM复习 正睿19冬令营&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;省选线上集训附加赛2 (改错:T1 T2 T3) bzoj [BeiJing2

CH_Vaniteux的博客 478
上一篇: C++ 加速(卡常)技巧【超级 快读、快写】
下一篇: CF665B Shopping
lvshu · 绿树
博客等级 码龄7年 44粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lvshu · 绿树

非常感谢您的搭讪

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值