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

题面

洛谷

题解

插曲:不知道为什么,一看到这个题目,我就想到了这个人。。。

如果不是有\(exLucas\),这题就是\(sb\)题。。。

首先,若\(\sum_{i=1}^mw_i>n\)就直接\(Impossible\)了

然后我们考虑怎么求方案,其实很简单啊。。。

就是

\[ans=\prod_{i=1}^m(n-\sum_{j=1}^{i-1}w_j)
\]

因为模数小,要用\(exLucas\)

代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <algorithm>
  7. using namespace std;
  8. typedef long long ll;
  9. ll exgcd(ll a, ll b, ll &x, ll &y) {
  10. if (!b) return x = 1, y = 0, a;
  11. ll res = exgcd(b, a % b, x, y), t;
  12. t = x, x = y, y = t - a / b * y;
  13. return res;
  14. }
  15. ll fpow(ll x, ll y, ll Mod) {
  16. ll res = 1;
  17. while (y) {
  18. if (y & 1ll) res = res * x % Mod;
  19. x = x * x % Mod;
  20. y >>= 1ll;
  21. }
  22. return res;
  23. }
  24. ll fac(ll n, ll pi, ll pk) {
  25. if (!n) return 1;
  26. ll res = 1;
  27. for (ll i = 2; i <= pk; i++)
  28. if (i % pi) res = res * i % pk;
  29. res = fpow(res, n / pk, pk);
  30. for (ll i = 2; i <= n % pk; i++)
  31. if (i % pi) res = res * i % pk;
  32. return res * fac(n / pi, pi, pk) % pk;
  33. }
  34. ll inv(ll n, ll Mod) {
  35. ll x, y;
  36. exgcd(n, Mod, x, y);
  37. return (x + Mod) % Mod;
  38. }
  39. ll CRT(ll b, ll p, ll Mod) { return b * inv(p / Mod, Mod) % p * (p / Mod) % p; }
  40. ll C(ll n, ll m, ll pi, ll pk) {
  41. ll fz = fac(n, pi, pk), fm1 = fac(m, pi, pk), fm2 = fac(n - m, pi, pk);
  42. ll k = 0;
  43. for (ll i = n; i; i /= pi) k += i / pi;
  44. for (ll i = m; i; i /= pi) k -= i / pi;
  45. for (ll i = n - m; i; i /= pi) k -= i / pi;
  46. return fz * inv(fm1, pk) % pk * inv(fm2, pk) % pk * fpow(pi, k, pk) % pk;
  47. }
  48. ll exlucas(ll n, ll m, ll Mod) {
  49. ll res = 0, tmp = Mod;
  50. for (int i = 2; 1ll * i * i <= Mod; i++)
  51. if (tmp % i == 0) {
  52. ll pk = 1; while (tmp % i == 0) pk *= i, tmp /= i;
  53. res = (res + CRT(C(n, m, i, pk), Mod, pk)) % Mod;
  54. }
  55. if (tmp > 1) res = (res + CRT(C(n, m, tmp, tmp), Mod, tmp)) % Mod;
  56. return res;
  57. }
  58. ll N, M, Mod;
  59. ll sum, w[10];
  60. int main () {
  61. cin >> Mod >> N >> M;
  62. for (int i = 1; i <= M; i++) cin >> w[i], sum += w[i];
  63. if (N < sum) return puts("Impossible") & 0;
  64. ll ans = 1;
  65. for (int i = 1; i <= M; i++) {
  66. ans = ans * exlucas(N, w[i], Mod) % Mod;
  67. N -= w[i];
  68. }
  69. printf("%lld\n", ans);
  70. return 0;
  71. }

【LG2183】[国家集训队]礼物的更多相关文章

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

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

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

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

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

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

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

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

    [国家集训队]礼物 题目背景 一年一度的圣诞节快要来到了.每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会 ...

  6. BZOJ 2039: [2009国家集训队]employ人员雇佣

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1369  Solved: 667[Submit ...

  7. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7676  Solved: 3509[Subm ...

  9. [转] ACM中国国家集训队论文集目录(1999-2009)

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...

随机推荐

  1. 从 Swift 中的序列到类型擦除

    如果有这样的一个需求,我希望能像数组一样,用 for 循环遍历一个类或结构体中的所有属性.就像下面这样: let persion = Persion() for i in persion { prin ...

  2. P2564 [SCOI2009]生日礼物

    题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...

  3. Kali-linux使用Wifite破解无线网络

    一些破解无线网络程序是使用Aircrack-ng工具集,并添加了一个图形界面或使用文本菜单的形式来破解无线网络.这使得用户使用它们更容易,而且不需要记住任何命令.本节将介绍使用命令行工具Wifite, ...

  4. PAT——1056. 组合数的和

    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字.要求所有可能组合出来的2位数字的和.例如给定2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入 ...

  5. HDFS的Read过程分析

    在hadoop中作为后端存储的文件系统HDFS发挥中重要的作用,HDFS是一个分布式文件系统,按照Google File System的思想开发的,针对的场景是低端服务器.写操作少而读操作多的情况.在 ...

  6. wordpress安装(ubuntu+nginx+php+mariadb)

    一.   环境 ubuntu12.04.4 nginx 1.6.0 mariadb 10.0 更新系统补丁 sudo apt-get update sudo apt-get dist-upgrade ...

  7. CoreAnimation|动画

    IOS开发UI篇--IOS动画(Core Animation)总结 - CSDN博客 iOS动画,绝对够分量! - 简书 iOS动画篇:UIView动画 - 简书 iOS动画开发之五--炫酷的粒子效果 ...

  8. Token ,Cookie和Session的区别

    在做接口测试时,经常会碰到请求参数为token的类型,但是可能大部分测试人员对token,cookie,session的区别还是一知半解. Cookie cookie 是一个非常具体的东西,指的就是浏 ...

  9. 【MySQL】基本语句

    ##mac启动mysql的命令语句## /usr/local/mysql/bin/mysql -u root -p ##然后输入密码 查看当前存在数据库 show databases; 创建数据库 c ...

  10. 同步工具类-----循环栅栏:CyclicBarrier

    import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; impor ...