Luogu P5339 [TJOI2019]唱、跳、rap和篮球
题目
设\(f_i\)表示从\((a-4i,b-4i,c-4i,d-4i)\)中选\(n-4i\)个排队的方案数。
那么我们可以容斥,答案为\(\sum\limits_{i=0}^{lim}(-1)^i{n-3i\choose i}f_i\)。
考虑一下这个\(f\),它就是四个指数型生成函数卷起来\((\sum\limits_{i=0}^a\frac{x^i}{i!})(\sum\limits_{i=0}^b\frac{x^i}{i!})(\sum\limits_{i=0}^c\frac{x^i}{i!})(\sum\limits_{i=0}^d\frac{x^i}{i!})\)。
\(f_i\)就是\(x^i\)的系数乘上\((n-4i)!\)。
我们考虑分成两半,前面是\((\sum\limits_{i=0}^a\frac{x^i}{i!})(\sum\limits_{i=0}^b\frac{x^i}{i!})\),后面是\((\sum\limits_{i=0}^c\frac{x^i}{i!})(\sum\limits_{i=0}^d\frac{x^i}{i!})\)。
每次修改相当于\(a,b,c,d\)都减一,这样子修改是\(O(n)\)的。求某一位的值可以直接暴力卷,也是\(O(n)\)的。
所以就做到了\(O(n^2)\)。
#include<bits/stdc++.h>
using namespace std;
const int N=1007,P=998244353;
int n,a,b,c,d,inv[N],fac[N],ifac[N],f[N],g[N];
void inc(int &a,int b){a+=b,a=a>=P? a-P:a;}
void dec(int &a,int b){a-=b,a=a<0? a+P:a;}
int mul(int a,int b){return 1ll*a*b%P;}
int C(int n,int m){return mul(mul(fac[n],ifac[m]),ifac[n-m]);}
void mns(int n,int m,int *f)
{
for(int i=0;i<=n;++i) dec(f[i+m],mul(ifac[i],ifac[m]));
for(int i=0;i<m;++i) dec(f[i+n],mul(ifac[i],ifac[n]));
}
int cal(int n)
{
int s=0;
for(int i=0;i<=n;++i) inc(s,mul(f[i],g[n-i]));
return mul(s,fac[n]);
}
int main()
{
cin>>n>>a>>b>>c>>d;int i,j,ans=0,x;
for(inv[1]=1,i=2;i<N;++i) inv[i]=mul(P-P/i,inv[P%i]);
for(fac[0]=ifac[0]=i=1;i<N;++i) fac[i]=mul(fac[i-1],i),ifac[i]=mul(ifac[i-1],inv[i]);
for(i=0;i<=a;++i) for(j=0;j<=b;++j) inc(f[i+j],mul(ifac[i],ifac[j]));
for(i=0;i<=c;++i) for(j=0;j<=d;++j) inc(g[i+j],mul(ifac[i],ifac[j]));
ans=cal(n);
for(i=1;i*4<=n&&a&&b&&c&&d;++i,--a,--b,--c,--d) mns(a,b,f),mns(c,d,g),x=mul(cal(n-i*4),C(n-i*3,i)),i&1? dec(ans,x):inc(ans,x);
printf("%d",ans);
}
Luogu P5339 [TJOI2019]唱、跳、rap和篮球的更多相关文章
- 【题解】Luogu P5339 [TJOI2019]唱、跳、rap和篮球
原题传送门 这题zsy写的是\(O(n^2)\),还有NTT\(O(n^2\log n)\)的做法.我的是暴力,\(O(\frac{a b n}{4})\),足够通过 考虑设\(f(i)\)表示序列中 ...
- [bzoj5510]唱跳rap和篮球
显然答案可以理解为有(不是仅有)0对情况-1对情况+2对情况-- 考虑这个怎么计算,先计算这t对情况的位置,有c(n-3t,t)种情况(可以理解为将这4个点缩为1个,然后再从中选t个位置),然后相当于 ...
- p5339 [TJOI2019]唱、跳、rap和篮球
分析 代码 #include<bits/stdc++.h> using namespace std; #define int long long ; ; ],inv[],G,cc[][] ...
- 将Android手机无线连接到Ubuntu实现唱跳Rap
您想要将Android设备连接到Ubuntu以传输文件.查看Android通知.以及从Ubuntu桌面发送短信 – 你会怎么做?将文件从手机传输到PC时不要打电话给自己:使用GSConnect就可以. ...
- [TJOI2019]唱、跳、rap和篮球_生成函数_容斥原理_ntt
[TJOI2019]唱.跳.rap和篮球 这么多人过没人写题解啊 那我就随便说说了嗷 这题第一步挺套路的,就是题目要求不能存在balabala的时候考虑正难则反,要求必须存在的方案数然后用总数减,往往 ...
- [TJOI2019]唱、跳、rap和篮球——NTT+生成函数+容斥
题目链接: [TJOI2019]唱.跳.rap和篮球 直接求不好求,我们考虑容斥,求出至少有$i$个聚集区间的方案数$ans_{i}$,那么最终答案就是$\sum\limits_{i=0}^{n}(- ...
- [luogu5339] [TJOI2019]唱、跳、rap和篮球(容斥原理+组合数学)(不用NTT)
[luogu5339] [TJOI2019]唱.跳.rap和篮球(容斥原理+组合数学)(不用NTT) 题面 略 分析 首先考虑容斥,求出有i堆人讨论的方案. 可以用捆绑法,把每堆4个人捆绑成一组,其他 ...
- 「TJOI2019」唱、跳、rap 和篮球 题解
题意就不用讲了吧-- 鸡你太美!!! 题意: 有 \(4\) 种喜好不同的人,分别最爱唱.跳. \(rap\).篮球,他们个数分别为 \(A,B,C,D\) ,现从他们中挑选出 \(n\) 个人并进行 ...
- [TJOI2019]唱,跳,rap,篮球(生成函数,组合数学,NTT)
算是补了个万年大坑了吧. 根据 wwj 的题解(最准确),设一个方案 \(S\)(不一定合法)的鸡你太美组数为 \(w(S)\). 答案就是 \(\sum\limits_{S}[w(S)=0]\). ...
随机推荐
- c# linq 分组groupby
转载: https://www.cnblogs.com/cncc/p/9846390.html 一.先准备要使用的类: 1.Person类: class Person { public string ...
- mssql因为手贱修改了服务配置的最大内存,造成无法启动
mssql数据库设置内存太小,造成无法启动服务. 解决办法: 1.用命令行形式启动最精简版的mssql服务,另外再用一个新的命令行去修改配置,将内存设置为无限制. 命令行要记得用管理员身份运行比较稳 ...
- mven pom.xml Overriding managed version 问题解决详解
问题原因:在于默认的parent中的版本springboot有固定的指定 删除指定版本 <dependency> <groupId>junit</groupId> ...
- linux操作目录命令之mkdir与rmdir
一.mkdir 创建目录(一个或多个目录) mkdir -m 777 -p path 1)-m 对新建目录设置权限 2)-p 可以是一个路径名称.此时若路径的某一级目录尚不存在,使有该选项后系统 ...
- springmvc/springboot开发restful API
非rest的url写法: 查询 GET /user/query?name=tom 详情 GET /user/getinfo? 创建 POST /user/create?name=tom 修改 POST ...
- luogu 4059 [Code+#1]找爸爸 动态规划
Description 小A最近一直在找自己的爸爸,用什么办法呢,就是DNA比对.小A有一套自己的DNA序列比较方法,其最终目标是最 大化两个DNA序列的相似程度,具体步骤如下:1.给出两个DNA序列 ...
- [NOIP2017]注意点
1.数据大却没开long long 导致的gg.2.文件读入时stdin打成stdout...3.桶维护数值,有负值要平移,且数值最好稍大(否则可能RE).4.很智障地打错变量.5.DP或其他涉及到转 ...
- SpringCloud 入门知识篇
SpringCloud 入门 springcloud 学习 7天学会springcloud 教程 https://www.cnblogs.com/skyblog/category/738524.htm ...
- 《数据结构(C语言)》苏小红 课本案例
期末了,赶紧复习一波,手打一份书上的代码以便随时查阅 第二章: //顺序表存储结构 #define MAXSIZE 100 typedef struct { Elemtype *elemt; int ...
- Oracle-RAC sysdate和current_date时间不一致,导致客户端连接时间延迟
[oracle@oracle-db1 ~]$ dateTue Oct 10 14:20:56 CST 2017[oracle@oracle-db1 ~]$ cat /etc/sysconfig/clo ...