「TJOI2019」唱、跳、rap 和篮球
题目分析
据说这是一道生成函数题
看到限制条件,我们首先想到的就是对有多少组讨论cxk的人进行容斥。然后就是求剩下的人随便放有多少种方法了。考虑现在每种剩\(a,b,c,d\)人,还需要排\(n\)人,那么方案数就是
\]
其中\([]\)内表达式为真时,值为\(1\),否则为\(0\)。
可以化简为
\]
这个式子暴力求得话复杂度明显不对,他是\(O(n^3)\)的。
考虑只枚举\(i\)和\(j\)。那么满足\(0\leqslant n-i-j-k\leqslant d\)的\(k\)显然是一个连续的区间,不妨记作\([L,R]\)。那么对答案的贡献就是
\]
后面那个求和预处理加前缀和即可\(O(1)\)求得。那么时间复杂度就降到了\(O(n^2)\)。加上外面一层容斥,那么总时间复杂度就是\(O(n^3)\)。
实现的时候注意边界条件!!!
参考程序
码风氪化
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const LL Maxn = 1010;
const LL Maxa = 510;
const LL Mod = 998244353;
LL N, A[ 4 ], Fact[ Maxn ], Inv[ Maxn ], C[ Maxn ][ Maxn ], Sum[ Maxn ][ Maxn ], Ans;
void Exgcd( LL a, LL b, LL &x, LL &y ) { if( b == 0 ) { x = 1; y = 0; return; } Exgcd( b, a % b, y, x ); y -= a / b * x; return; }
LL inv( LL a ) { LL x, y; Exgcd( a, Mod, x, y ); if( x < 0 ) x += Mod; return x; }
LL S( LL n, LL l, LL r ) { LL Ans = Sum[ n ][ r ]; if( l ) Ans = ( Ans - Sum[ n ][ l - 1 ] + Mod ) % Mod; return Ans; }
LL Cal( LL Sta ) {
LL Ans = 0; for( LL i = 0; i < 4; ++i ) A[ i ] -= Sta;
for( LL i = 0; i <= A[ 0 ] && i <= N - Sta * 4; ++i )
for( LL j = max( 0LL, N - Sta * 4 - A[ 2 ] - A[ 3 ] - i ); j <= A[ 1 ] && i + j <= N - Sta * 4; ++j ) {
Ans = ( Ans + C[ N - Sta * 4 ][ i ] * C[ N - Sta * 4 - i ][ j ] % Mod * S( N - Sta * 4 - i - j, max( 0LL, N - Sta * 4 - i - j - A[ 3 ] ), min( N - Sta * 4 - i - j, A[ 2 ] ) ) % Mod ) % Mod;
}
for( LL i = 0; i < 4; ++i ) A[ i ] += Sta; return Ans;
}
void Work() {
for( LL i = 0; i <= N / 4; ++i ) {
for( LL j = 0; j < 4; ++j ) if( i > A[ j ] ) return;
if( i & 1 ) Ans = ( Ans - C[ N - i * 3 ][ i ] * Cal( i ) % Mod + Mod ) % Mod;
else Ans = ( Ans + C[ N - i * 3 ][ i ] * Cal( i ) % Mod ) % Mod;
}
return;
}
int main() {
scanf( "%lld", &N ); for( LL i = 0; i < 4; ++i ) scanf( "%lld", &A[ i ] );
Fact[ 0 ] = 1; for( LL i = 1; i <= N; ++i ) Fact[ i ] = Fact[ i - 1 ] * i % Mod;
Inv[ N ] = inv( Fact[ N ] ); for( LL i = N - 1; i >= 0; --i ) Inv[ i ] = Inv[ i + 1 ] * ( i + 1 ) % Mod;
for( LL i = 0; i <= N; ++i ) for( LL j = 0; j <= i; ++j ) C[ i ][ j ] = Fact[ i ] * Inv[ j ] % Mod * Inv[ i - j ] % Mod;
for( LL i = 0; i <= N; ++i ) for( LL j = 0; j <= i; ++j ) Sum[ i ][ j ] = ( Sum[ i ][ j - 1 ] + C[ i ][ j ] ) % Mod;
Work(); printf( "%lld\n", Ans );
return 0;
}
「TJOI2019」唱、跳、rap 和篮球的更多相关文章
- 「TJOI2019」唱、跳、rap 和篮球 题解
题意就不用讲了吧-- 鸡你太美!!! 题意: 有 \(4\) 种喜好不同的人,分别最爱唱.跳. \(rap\).篮球,他们个数分别为 \(A,B,C,D\) ,现从他们中挑选出 \(n\) 个人并进行 ...
- [bzoj5510]唱跳rap和篮球
显然答案可以理解为有(不是仅有)0对情况-1对情况+2对情况-- 考虑这个怎么计算,先计算这t对情况的位置,有c(n-3t,t)种情况(可以理解为将这4个点缩为1个,然后再从中选t个位置),然后相当于 ...
- 【LOJ】#3109. 「TJOI2019」甲苯先生的线段树
LOJ#3109. 「TJOI2019」甲苯先生的线段树 发现如果枚举路径两边的长度的话,如果根节点的值是$x$,左边走了$l$,右边走了$r$ 肯定答案会是$(2^{l + 1} + 2^{r + ...
- LG5337/BZOJ5508 「TJOI2019」甲苯先生的字符串 线性动态规划+矩阵加速
问题描述 LG5337 BZOJ5508 题解 设\(opt_{i,j}(i \in [1,n],j \in [1,26])\)代表区间\([1,i]\),结尾为\(j\)的写法. 设\(exist_ ...
- LG5338/BZOJ5509/LOJ3105 「TJOI2019」甲苯先生的滚榜 Treap
问题描述 LG5338 LOJ3105 BZOJ5509 题解 建立一棵\(\mathrm{Treap}\),把原来的\(val\)换成两个值\(ac,tim\) 原来的比较\(val_a<va ...
- LOJ#3104「TJOI2019」甲苯先生的字符串
题目描述 一天小甲苯得到了一条神的指示,他要把神的指示写下来,但是又不能泄露天机,所以他要用一种方法把神的指示记下来. 神的指示是一个字符串,记为字符串 \(s_1\),\(s_1\) 仅包含小写字母 ...
- 「TJOI2019」大中锋的游乐场
题目链接 问题分析 比较明显的最短路模型.需要堆优化的dij.建图的时候注意细节就好. 参考程序 #include <bits/stdc++.h> #define LL long long ...
- 「TJOI2019」甲苯先生的滚榜
题目链接 问题分析 参照数据范围,我们需要一个能够在\(O(n\log n)\)复杂度内维护有序数列的数据结构.那么平衡树是很好的选择.参考程序中使用带旋Treap. 参考程序 #pragma GCC ...
- 将Android手机无线连接到Ubuntu实现唱跳Rap
您想要将Android设备连接到Ubuntu以传输文件.查看Android通知.以及从Ubuntu桌面发送短信 – 你会怎么做?将文件从手机传输到PC时不要打电话给自己:使用GSConnect就可以. ...
随机推荐
- nginx反向代理_负载均衡
注意ip地址为: 虚拟机ip设置 TYPE="Ethernet"BOOTPROTO="static"NAME="enp0s3"DEVICE= ...
- .Net Core Grpc 实现通信
.Net Core 3.0已经把Grpc作为一个默认的模板引入,所以我认为每一个.Net程序员都有学习Grpc的必要,当然这不是必须的. 我在我的前一篇文章中介绍并创建了一个.Net Core 3.0 ...
- 爬虫实例学习——爬取酷狗TOP500数据
酷狗网址:https://www.kugou.com/yy/rank/home/1-8888.html?from=rank 环境:eclipse+pydev import requests from ...
- 屏幕的遮挡层,js得到屏幕宽高、页面宽高 (window.screen.availHeight)等--
window.screen.availWidth 返回当前屏幕宽度(空白空间) ------当手机有输入法的时候,要注意................window.screen.availHeigh ...
- 模块之re模块 正则表达式
正则表达式,正则表达式在处理字符串上有先天的优势,尤其大数量的字符串.先来记一个网站,此网站功能就是关于正则表达式方面的应用http://tool.chinaz.com/regex/ 单纯的正则表达式 ...
- javaagent项目中使用
相关代码参考:http://blog.csdn.net/catoop/article/details/51034778 近期项目中需要对SpringMVC中的Controller方法进行拦截做预处理, ...
- windows下php配置环境变量
这样重启终端后,通过php -v可查看新使用的php版本信息. 注:在path配置在上方的先生效
- 网站更换服务器出现加载不了js css文件的问题
原因是 里面加找不到.woff类型,后面把上面注释掉就可以了
- Hadoop环境安装和集群创建
虚拟机使用vmware,vmware可以直接百度下载安装 秘钥也能百度到 安装很简单 CentOS 7下载: 进入官网 https://www.centos.org/download/ 这里有三种 第 ...
- 帝国cms所有一级栏目遍历,如果有子栏目的话,遍历出来
所有一级栏目遍历,如果有子栏目的话,遍历出来. 注意下方的bclassid是可以改变的.可以改成自己想要设置的父栏目id. 遍历所有栏目,如果有二级栏目的话显示 [e:loop={"sele ...