[国家集训队]礼物

题目背景

一年一度的圣诞节快要来到了。每年的圣诞节小 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元大奖)

P2183 [国家集训队]【一本通提高组合数学】礼物的更多相关文章

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

    题目描述 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店中购买了n件礼物 ...

  2. luogu P2183 [国家集训队]礼物

    LINK:礼物 n个物品 m个人 每个人要分得wi 个物品 每个物品互异 分给每个人的物品不分顺序 求方案数. \(n,p\leq 1e9 m\leq 5\) 方案数 那显然是 第一个人拿了w1件物品 ...

  3. 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 ...

  4. P2532 [AHOI2012]【一本通提高组合数学】树屋阶梯

    [AHOI2012]树屋阶梯 题目描述 输入格式 一个正整数N( 1 ≤ N ≤ 500 1\le N \le 500 1≤N≤500),表示阶梯的高度. 输出格式 一个正整数,表示搭建方法的个数.( ...

  5. [HNOI2009]【一本通提高组合数学】有趣的数列

    [HNOI2009]有趣的数列 题目描述 我们称一个长度为 2 n 2n 2n 的数列是有趣的,当且仅当该数列满足以下三个条件: 它是从 1 ∼ 2 n 1 \sim 2n 1∼2n 共 2 n 2n ...

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

    题面 思路 根据二项式定理, 那么 算  需要用快速幂. 可以根据组合式的递推公式算组合数.我是这么写的. 或者是利用组合数的定义式,但是因为有取余, 所以要用逆元. 其中  为逆元, 这个可以直接用 ...

  7. NOI 国家集训队论文集

    鉴于大家都在找这些神牛的论文.我就转载了这篇论文合集 国家集训队论文分类 组合数学 计数与统计 2001 - 符文杰:<Pólya原理及其应用> 2003 - 许智磊:<浅谈补集转化 ...

  8. 【LG2183】[国家集训队]礼物

    [LG2183][国家集训队]礼物 题面 洛谷 题解 插曲:不知道为什么,一看到这个题目,我就想到了这个人... 如果不是有\(exLucas\),这题就是\(sb\)题... 首先,若\(\sum_ ...

  9. 【题解】国家集训队礼物(Lucas定理)

    [国家集训队]礼物(扩展Lucas定理) 传送门可以直接戳标题 172.40.23.20 24 .1 答案就是一个式子: \[ {n\choose \Sigma_{i=1}^m w}\times\pr ...

随机推荐

  1. 一文说透 MySQL JSON 数据类型(收藏)

    JSON 数据类型是 MySQL 5.7.8 开始支持的.在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档. 相对字符类型,原生的 JSON 类型具有以下优 ...

  2. 蓝桥杯Web练习题:多个斜线开始的路径重定向问题

    多个斜线开始的路径重定向问题 需求说明 在 vue-router v3.5.2 版本代码中存在一个 Bug,一个以多个斜线(///)开始的路径实际上可能会重定向到另一个域.这是因为 cleanPath ...

  3. 一款高速的NET版的离线免费OCR

    PaddleOCR.Onnx 一款基于Paddle的OCR,项目使用ONNX模型,速度更快.本项目同时支持X64和X86的CPU上使用.本项目是一个基于PaddleOCR的C++代码修改并封装的.NE ...

  4. 设计模式存在哪些关联关系,六种关系傻傻分不清--- UML图示详解

    前言 UML俗称统一建模语言.我们可以简单理解成他是一套符号语言.不同的符号对应不同的含义.在之前设计模式章节中我们文章中用到的就是UML类图,UML除了类图意外还有用例图,活动图,时序图. 关于UM ...

  5. Springboot目录结构分析

    1 src/main/java 存储源码 2 src/main/resource 资源文件夹    (1)src/main/resource/static 用于存放静态资源,如css.js.图片.文件 ...

  6. OAuth2.0笔记

    OAuth2.0笔记 角色 一般资源服务器和授权服务器是一个 资源拥有者 客户端应用 资源服务器 授权服务器 客户端类型 OAuth 2.0规范定义了两种客户端类型: 保密的:web应用 公有的:用户 ...

  7. OpenWrt 20.02.2 小米路由器3G配置CP1025网络打印

    家里的施乐 CP116w 工作快五年了终于罢工了. 黑粉报错, 自己也不会拆, 只能搁置了. 后来换了个 HP CP1025. 这个打印机也不错, 墨盒便宜没什么废粉, 就是启动慢一点, 而且 -- ...

  8. 一起看 I/O | Flutter 3 更新详解

    作者 / Kevin Jamaul Chisholm, Technical Program Manager for Dart and Flutter at Google 又到了 Flutter 稳定版 ...

  9. Istio 中实现客户端源 IP 的保持

    作者 尹烨,腾讯专家工程师, 腾讯云 TCM 产品负责人.在 K8s.Service Mesh 等方面有多年的实践经验. 导语 对于很多后端服务业务,我们都希望得到客户端源 IP.云上的负载均衡器,比 ...

  10. Python中plt.plot()、plt.scatter()和plt.legend函数的用法示例

    参考:http://www.cppcns.com/jiaoben/python/471948.html https://blog.csdn.net/weixin_44825185/article/de ...