唱、跳、rap 和篮球「TJOI2019」
时间:2019-09-26
本文章向大家介绍唱、跳、rap 和篮球「TJOI2019」,主要包括唱、跳、rap 和篮球「TJOI2019」使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意
有若干个人,喜欢唱跳rap篮球,数量给定。排成一行,如果有连续四个人分别喜欢唱跳rap篮球,那么不合法。求总方案数。
思路
容易想到枚举连续情况,然后删去,但是这样无法解决连续情况外的连续。
所以考虑容斥。
每次容斥的时候如果暴力求出方案会到\(O(n^3)\),所以可以用一个小trick优化一下:枚举哪些部分唱跳,哪些部分rap篮球,然后\(O(1)\)计算区内方案数。(此处是否选择唱跳并不重要,因为是对称的)
代码
#include <bits/stdc++.h>
using namespace std;
namespace StandardIO {
template<typename T>inline void read (T &x) {
x=0;T f=1;char c=getchar();
for (; c<'0'||c>'9'; c=getchar()) if (c=='-') f=-1;
for (; c>='0'&&c<='9'; c=getchar()) x=x*10+c-'0';
x*=f;
}
template<typename T>inline void write (T x) {
if (x<0) putchar('-'),x*=-1;
if (x>=10) write(x/10);
putchar(x%10+'0');
}
}
using namespace StandardIO;
namespace Project {
#define int long long
const int N=1001;
const int MOD=998244353;
int n,a,b,c,d,ans;
int C[N][N],sum[N][N];
inline int query (int i,int l,int r) {
if (r<l) return 0;
if (l<=0) return sum[i][r];
return (sum[i][r]-sum[i][l-1]+MOD)%MOD;
}
inline void MAIN () {
read(n),read(a),read(b),read(c),read(d),a=min(n,a),b=min(n,b),c=min(n,c),d=min(n,d);
for (register int i=0; i<=1000; ++i) {
C[i][0]=sum[i][0]=1;
for (register int j=1; j<=i; ++j) {
C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
}
for (register int j=1; j<=1000; ++j) {
sum[i][j]=(sum[i][j-1]+C[i][j])%MOD;
}
}
for (register int i=0; i<=n/4; ++i) {
int res=0,left=n-i*4;
for (register int j=0; j<=left; ++j) {
int rap=left-j;
res=(res+C[left][j]*query(j,j-a,b)%MOD*query(rap,rap-c,d)%MOD)%MOD;
}
res=(res*C[i+left][i])%MOD;
if (i&1) ans=(ans-res+MOD)%MOD;
else ans=(ans+res)%MOD;
--a,--b,--c,--d;
if (a<0||b<0||c<0||d<0) break;
}
write(ans);
}
#undef int
}
int main () {
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
Project::MAIN();
}
原文地址:https://www.cnblogs.com/ilverene/p/11592841.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 技术篇-对音频、图片等文件进行base64编码和解码
- 图片:“给你五十行代码把我变成字符画!” 程序:“太多了,一半都用不完!”
- HTML布局标记和列表标记
- 使用frp搭建内网穿透
- CNS图表复现03—单细胞区分免疫细胞和肿瘤细胞
- C#记事本项目开发,一个可以实现批量操作的记事本!【附源码】
- Python 库引用问题:name 'json' is not defined,原因及解决办法
- Java集合类之Collection接口,集合的“爸爸”接口了解一下?
- Python 微信机器人-下载微信接收到的语音、图片等资源
- Python源文件打包成可执行的exe应用,给你的代码变个身!
- Python 技术篇-ffmpeg.exe的安装及配置
- Python 库配置问题-"Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work",原因及解决办法
- 小白都能看懂的简单爬虫入门案例剖析(爬虫入门看它就够了!)
- Python 技术篇-音频mp3格式转wav格式,高保真
- Python3 模块