传送门

文章目录

  • 题意:
  • 思路:

题意:

思路:

这个题显然可以容斥来写,刚学生成函数就来水一下。
对于每一堆iii我们写出其生成函数Fi(x)=∑k=0mi(1+x+x2+...+xmi)=1−x1+mi1−xF_i(x)=\sum_{k=0}^{m_i}(1+x+x^2+...+x^{m_i})=\frac{1-x^{1+m_i}}{1-x}Fi​(x)=∑k=0mi​​(1+x+x2+...+xmi​)=1−x1−x1+mi​​,那么将所有堆的生成函数乘起来即G(x)=∏i=1nFi(x)=∏i=1n1−x1+mi1−x=(1−x)−n∗∏i=1n(1−x1+mi)G(x)=\prod_{i=1}^nF_i(x)=\prod_{i=1}^n \frac{1-x^{1+m_i}}{1-x}=(1-x)^{-n}*\prod_{i=1}^n(1-x^{1+m_i})G(x)=∏i=1n​Fi​(x)=∏i=1n​1−x1−x1+mi​​=(1−x)−n∗∏i=1n​(1−x1+mi​),对于后面的这项,由于nnn很小,所以展开最多只有2n2^n2n项,直接暴力展开即可。
对于前面的,我们用牛顿二项式定理展开(1−x)−n=∑i≥0(n+i−1i)xi(1-x)^{-n}=\sum_{i\ge0}\binom{n+i-1}{i}x^i(1−x)−n=∑i≥0​(in+i−1​)xi,可以得到对应的xxx项的系数,所以我们直接枚举∏i=1n(1−x1+mi)\prod_{i=1}^n(1-x^{1+m_i})∏i=1n​(1−x1+mi​)展开之后的指数为kkk的系数tkt_ktk​,让后计算前面的项对答案的贡献,即tk∗∑i=a−kb−k(n−1−ii)t_k*\sum_{i=a-k}^{b-k}\binom{n-1-i}{i}tk​∗∑i=a−kb−k​(in−1−i​),考虑将其转换成一个前缀和的形式,考虑到有∑i=0k(n−1+ii)=(n+kn)\sum_{i=0}^k\binom{n-1+i}{i}=\binom{n+k}{n}∑i=0k​(in−1+i​)=(nn+k​),所以对上面式子进行化简ck∗((n+b−kb−k)−(n+a−k−1a−k−1))c_k*(\binom{n+b-k}{b-k}-\binom{n+a-k-1}{a-k-1})ck​∗((b−kn+b−k​)−(a−k−1n+a−k−1​)),其实到这里应该就已经结束了,直接枚举2k2^k2k个ckc_kck​让后直接得到答案即可。但是这个题模数不是个质数,而且组合数很大,所以考虑将其转换为ck∗((n+b−kn)−(n+a−k−1n))c_k*(\binom{n+b-k}{n}-\binom{n+a-k-1}{n})ck​∗((nn+b−k​)−(nn+a−k−1​)),这样最多只有nnn项,且分母是n!n!n!,我们将模数乘上n!n!n!,在计算组合数的时候将其模上即可,这样就可避免组合数过大。
调了半天,代码很丑。。

//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=20000010,INF=0x3f3f3f3f;
const double eps=1e-6;int n,a,b;
LL mod=2004;
int p[20];
LL inv[N],fun[N],now;LL C(int a,int b)
{if(a<0||b<0||a<b) return 0;LL noww=1;for(int i=a,j=b;j;i--,j--) (noww*=1ll*i%mod)%=mod;return (noww/now)%2004;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);cin>>n>>a>>b;now=1;for(int i=2;i<=n;i++) now*=i; mod*=now;for(int i=1;i<=n;i++) scanf("%d",&p[i]),p[i]++;map<int,int>mp;mp[0]=1;for(int i=1;i<=n;i++) {map<int,int>now=mp;for(auto x:mp) {now[x.X+p[i]]+=x.Y*(-1);}mp=now;}LL ans=0;for(auto x:mp) {int c=x.Y,k=x.X;LL now=(C(n+b-k,n)-C(n+a-k-1,n))%2004;ans+=c*now%2004; ans%=2004; ans+=2004; ans%=2004;}printf("%lld\n",ans);return 0;
}
/**/

#3027. [Ceoi2004]Sweet 生成函数 + 组合数学相关推荐

  1. bzoj 3027: [Ceoi2004]Sweet(母函数+组合数)

    3027: [Ceoi2004]Sweet Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 169  Solved: 82 [Submit][Statu ...

  2. luogu P6078 [CEOI2004] Sweets(生成函数入门题)

    我的生成函数只有幼儿园水平/kk https://www.luogu.com.cn/problem/P6078 首先对于一种糖,它的生成函数可以写成这样,封闭形式就是 ∑ j = 0 m i x j ...

  3. 任务管理软件 Things3 教程使用示例

    0. 前言 0.1 本文的目录 图0. 本文目录 0.2 阅读本文能给你带来什么 任务管理软件Things3入门 + 作者对于Things3的使用流程 = 10分钟阅读 + 10分钟实践 1. Tin ...

  4. 【组合数学】指数生成函数 ( 指数生成函数求解多重集排列示例 2 )

    文章目录 一.指数生成函数求解多重集排列示例 2 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相 ...

  5. 【组合数学】指数生成函数 ( 指数生成函数求解多重集排列示例 )

    文章目录 一.指数生成函数求解多重集排列示例 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 ...

  6. 【组合数学】指数生成函数 ( 证明指数生成函数求解多重集排列 )

    文章目录 一.证明指数生成函数求解多重集排列 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 ...

  7. 【组合数学】指数生成函数 ( 指数生成函数性质 | 指数生成函数求解多重集排列 )

    文章目录 一.指数生成函数性质 二.指数生成函数求解多重集排列 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | ...

  8. 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )

    文章目录 一.重复有序拆分 二.不重复有序拆分 1.无序拆分基本模型 2.全排列 三.重复有序拆分方案数证明 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式 ...

  9. 【组合数学】生成函数 ( 正整数拆分 | 正整数拆分基本模型 | 有限制条件的无序拆分 )

    文章目录 一.正整数拆分基本模型 二.有限制条件的无序拆分 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 ...

最新文章

  1. laravel5.4 关于数据填充的知识
  2. 领导让我重构代码_领导不是由代码构成
  3. python ix loc iloc_pandas中的iloc、loc、ix有什么区别?
  4. Python开发【第三篇】:Python基本数据类型
  5. jvm性能调优实战 - 30使用jmap和jhat摸清线上系统的对象分布
  6. 如何理解clone对象
  7. 让vue-router渲染为指定的标签
  8. Java大牛分享的面试知识点
  9. cesium等高线_Cesium开源三维地球离线地图发布源码示例功能
  10. 25深入理解C指针之---传递数组
  11. 爬虫爬取下载qq音乐,又跟新的风口相关?(附源码和资料)
  12. 刘强东的高调,给京东带来了流量,也给京东带来了灾难
  13. 小丁是怎样入门git的
  14. java分页打印_谷歌Chrome打印分页
  15. 使用火车头采集器笔记
  16. 暗影格斗3服务器响应比预期,暗影格斗3代码问题导致无法正常游戏
  17. 沈阳建筑学计算机专硕调剂,2020年沈阳建筑大学硕士研究生招生考试网上调剂公告...
  18. 【毕设狗】【单片机毕业设计】基于单片机的温控风扇的设计–仿真设计
  19. angular UI框架
  20. 中国磷酸铁锂产业链发展潜力及投资前景评估报告2022-2028年版

热门文章

  1. java idea 模块_idea 多模块项目依赖父工程class找不到问题的方法
  2. 柠檬汁制成的电池可以开动超100千克的车子吗?
  3. 就两本书?还能吊起相扑选手?
  4. 有趣的物理照片,让你瞬间爱上物理!
  5. 如何逼疯一名数学系学生?
  6. 震撼!英伟达用深度学习做图像修复,毫无ps痕迹
  7. r语言用行名称提取数据框信息显示na_学会这些R语言技巧至少可以节省半年时间...
  8. java成员变量垃圾回收_JAVA 对象被垃圾回收后其成员变量可用吗? | 学步园
  9. c++游戏代码大全_还在学少儿编程?不如来玩工厂编程师,免费学编程逻辑的小游戏...
  10. openkruise 缩容_Linus 本尊也来了!为什么 KubeCon 越来越火了?