#3027. [Ceoi2004]Sweet 生成函数 + 组合数学

传送门

文章目录

  • 题意:
  • 思路:

题意:

在这里插入图片描述

思路:

这个题显然可以容斥来写,刚学生成函数就来水一下。
对于每一堆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)=1x1x1+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=1nFi(x)=i=1n1x1x1+mi=(1x)ni=1n(1x1+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(1x)n=i0(in+i1)xi,可以得到对应的xxx项的系数,所以我们直接枚举∏i=1n(1−x1+mi)\prod_{i=1}^n(1-x^{1+m_i})i=1n(1x1+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}tki=akbk(in1i),考虑将其转换成一个前缀和的形式,考虑到有∑i=0k(n−1+ii)=(n+kn)\sum_{i=0}^k\binom{n-1+i}{i}=\binom{n+k}{n}i=0k(in1+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((bkn+bk)(ak1n+ak1)),其实到这里应该就已经结束了,直接枚举2k2^k2kckc_kck让后直接得到答案即可。但是这个题模数不是个质数,而且组合数很大,所以考虑将其转换为ck∗((n+b−kn)−(n+a−k−1n))c_k*(\binom{n+b-k}{n}-\binom{n+a-k-1}{n})ck((nn+bk)(nn+ak1)),这样最多只有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;
}
/**/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

坚持一个好习惯该有多难?

引子这段时间以来我都在坚持写博客&#xff0c;但是更新得比较少&#xff0c;每周才能一更&#xff0c;不过好歹也勉勉强强也能坚持下去了。我们社区还组建了一个博客互勉群&#xff0c;不过除了个别人能经常打卡外&#xff0c;大部分人都是混个脸熟&#xff0c;凑个热闹。在这…

#3771. Triple 生成函数 + FFT + 容斥

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 注意到这个题是求若干个数的组合数&#xff0c;(a,b),(b,a)(a,b),(b,a)(a,b),(b,a)视为一种方案&#xff0c;所以我们考虑生成一个普通型生成函数。 考虑到每个数只能选一次&#xff0c;但…

gRPC in ASP.NET Core 3.0 -- 前言

现如今微服务很流行&#xff0c;而微服务很有可能是使用不同语言进行构建的。而微服务之间通常需要相互通信&#xff0c;所以微服务之间必须在以下几个方面达成共识&#xff1a;需要使用某种API数据格式错误的模式负载均衡。。。现在最流行的一种API风格可能是REST&#xff0c;…

P3246 [HNOI2016]序列 莫队 + ST表 + 单调栈

传送门 文章目录题意&#xff1a;思路&#xff1a;Update题意&#xff1a; 思路&#xff1a; 比较神奇的一个题&#xff0c;这里先介绍莫队的离线解法。 不难发现&#xff0c;用莫队来做最大的难点就是在进行区间移动的时候如何快速计算贡献。 比如[l,r]−>[l,r1][l,r]->…

WPF 渲染原理

对于开发者来说&#xff0c;WPF 中最主要的知识点就是渲染&#xff0c;因为 WPF 是一个界面框架。想用一篇博客就能告诉大家完整的 WPF 渲染原理是不可能的。本文向大家介绍从开发者执行绘图指令到在屏幕显示的过程。本文是从一个全局的角度来看渲染的过程&#xff0c;在本文之…

HDU - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?! 莫队/单调栈 + 线段树/ST表在线

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 考虑将贡献分开来算&#xff0c;先计算最大值&#xff0c;再算个最小值&#xff0c;之后答案就是((maxmin)/2)/(len∗(len1)/2)((maxmin)/2)/(len*(len1)/2)((maxmin)/2)/(len∗(len1)/2)。…

ASP.NET Core 中的管道机制

首先&#xff0c;很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们&#xff0c;感谢你们的支持与肯定。希望我的每一次分享都能让彼此获得一些收获&#xff0c;当然如果我有些地方叙述的不正确或不当&#xff0c;还请不客气的指出。好了&#xff0c;下面进入正文…

微软宣布SQL Server 2019免费支持Java

在 2018 年 9 月的时候&#xff0c;微软就宣布与领先的 Java 开源贡献者和发行商 Azul Systems 建立新的合作伙伴关系。这一关系允许所有 Azure 客户在微软和 Azul 联合提供的支持下&#xff0c;免费使用 Azul 的 Zulu for Azure-Enterprise Java 发行版 。最近&#xff0c;微软…

P4231 三步必杀 二次差分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 考虑给[2,6][2,6][2,6]加上s2,e10s2,e10s2,e10的等差数列&#xff0c;变成2,4,6,8,102,4,6,8,102,4,6,8,10&#xff0c;考虑差分数组2,2,2,2,2,−102,2,2,2,2,-102,2,2,2,2,−10&#xff0…

创新的迷思——2019 Microsoft Hackathon 苏州站回顾

每年&#xff0c;微软在7月份都会在内部举办一次黑客松&#xff08;Hachathon&#xff09;活动&#xff0c;所有的员工&#xff0c;包括实习生都可以自由组队参赛&#xff0c;在为期一周的时间内完成构想、设计和开发的一系列过程&#xff0c;并且在最后一天进行项目路演和评选…

P4062 [Code+#1]Yazid 的新生舞会 树状数组维护三阶差分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个序列aaa&#xff0c;让你求有多少个子区间满足存在一个数是这个区间的绝对众数&#xff0c;绝对众数指该数在区间内出现的次数严格大于r−l12\frac{r-l1}{2}2r−l1​。 n≤5e5,0≤ai≤n−1n\le5e5,0…

一句话概括4本管理著作

之前618活动的时候买了不少书&#xff0c;最近一段时间集中看了四本管理相关的书籍&#xff0c;收获颇丰。在这里分享给大家。如果你不是管理者也没关系&#xff0c;可以换个视角来看看管理者眼中的世界&#xff0c;毕竟&#xff0c;“赤兔马”也需要让“伯乐”看到才行嘛。虽然…

[译].Net中的内存-什么分配在了哪里

原文链接&#xff1a;https://jonskeet.uk/csharp/memory.html人们在理解值类型和引用类型之间的差异时因为“值类型在栈上分配&#xff0c;引用类型在堆上分配”这句话造成了很多混乱。这完全是不对的&#xff0c;本文试图澄清这个问题。变量中有什么&#xff1f;理解.NET中内…

上车时机已到--.NETCore是适应时代发展的雄鹰利剑

要起飞了.NET Core 3.0-prevew7&#xff1a;https://dotnet.microsoft.com/download/dotnet-core/3.0随着 .NET Core 3.0-prevew7 的发布&#xff0c;开源社区的一支重要力量重要即将起飞&#xff1b;官方指出&#xff0c;该预览版为可能为最终版本&#xff0c;在很长一段时间内…

HDU - 7028 Decomposition 无向完全图构造欧拉回路

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一张无向完全图&#xff0c;让你构造kkk个长度分别为lil_ili​的路径&#xff0c;这些路径不相交&#xff0c;且∑lin∗(n−1)2\sum l_i\frac{n*(n-1)}{2}∑li​2n∗(n−1)​。 n≤1000,nmod21n\le1000,…

「Azure」数据分析师有理由爱Azure之二-立即申请帐号开始学习之旅

目前关于Azure的学习资料不多&#xff0c;除了官方的文档和Microsoft Learn频道外&#xff0c;几乎没有什么中文性资料可学习&#xff0c;就算有&#xff0c;也是以IT的思维方式来展开介绍&#xff0c;对没有IT背景的数据分析师来说&#xff0c;非常难于适应。本篇给大家带来一…

矩阵快速幂的最简单用法

矩阵快速幂 链接&#xff1a;https://ac.nowcoder.com/acm/contest/1168/K 来源&#xff1a;牛客网 题目描述 这个勇者明明超强却过分慎重&#xff0c;勇者龙宫院圣哉与n名冒险者一起去讨伐神秘魔物&#xff0c;龙宫院圣哉十分谨慎&#xff0c;他只会在最后一刻出手&#xff…

DevOps案例研究|史上最能“拜客户教”的公司,是如何做到持续交付的?(第1趴)...

内容来源&#xff1a;DevOps案例深度研究 –Amazon持续交付之道战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会&#xff0c;及本公众号。&#xff09;本案例内容贡献者&#xff1a;单冰 (Topic Leader)、 赵栋、梁兴龙、李杰、毛艳清、牛恒…

P2261 [CQOI2007]余数求和 整除分块

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n,k≤1e9n,k\le1e9n,k≤1e9 思路&#xff1a; 考虑转换式子&#xff0c;∑i1nkmodi∑i1n(k−⌊ki⌋∗i)n∗k−∑i1n⌊ki⌋∗i\sum_{i1}^{n}k\bmod i\sum_{i1}^n(k-\left \lfloor \frac{k}{i} \right \rfloo…

背包问题——第一篇

一&#xff0c;01背包 最简单也是最经典的背包问题。 首先我们知道背包问题是一种d问题&#xff0c;最重要的就是要去找到他的状态转移方程。而在01背包中转移方程就比较简单了&#xff0c;这里用一个二维数组进行标表示。 ans[i][j]max(ans[i-1][j],ans[i-1][j-v[i]w[i]); 在…