牛客练习赛64 D【容斥+背包】
牛客练习赛64 D.宝石装箱
Description
\(n\)颗宝石装进\(n\)个箱子使得每个箱子中都有一颗宝石。第\(i\)颗宝石不能装入第\(a_i\)个箱子。求合法的装箱方案对\(998244353\)取模。
两种装箱方案不同当且仅当两种方案中存在一颗编号相同的宝石装在不同编号的箱子中。
\(n\le 8000\)
题解:
直接计算肯定不好做,考虑用容斥来做
令\(g_x\)为\(n\)个宝石中\(x\)个宝石放在不合法的位置的方案数
那么我们的答案可以用容斥表示为\(\sum_{i=0}^{n}(-1)^i\cdot g_i\cdot (n-i)!\)
其中\(g_i\cdot (n-i)!\)可以表示为至少选择\(i\)个宝石放在不合法的位置的方案数,其中必然会出现重复计数,比如固定了\(1,3\)不合法然后在后面随意放置的情况下\(2\)放在了不合法位置,和固定了\(1,2\)不合法然后在后面随意放置的情况下\(3\)放在了不合法位置,所以这里要利用容斥去解决
现在考虑如何计算\(g_x\)
可以令\(g[i][j]\)表示:只考虑前\(i\)个箱子的情况下,有\(j\)个宝石放在不合法的位置的方案数,\(A[i]\)表示有多少个宝石放在第\(i\)个箱子是不合法的
转移方程:\(g[i][j]=g[i-1][j] + g[i-1][j-1]\cdot A[i]\)
其中\(g[i][0]=1\)
也就是说当前这\(j\)个不合法的位置可能有两种方式得到:
- \(j\)个不合法的宝石都放在箱子\(1—i-1\)之间
- \(j-1\)个不合法的宝石放在在箱子\(1—i-1\)之间,还有一个不合法的宝石在\(i\)这个箱子中
最后得到的\(g[n][j]\)就是\(g_x\)
这个状态转移方程都是从上一层得到的,可以内存优化,只用一维数组
//#pragma GCC optimize("O3")
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
typedef long long int LL;
const LL MOD = 998244353;
const int MAXN = 8e3+7;
LL n,f[MAXN],A[MAXN],g[MAXN];
int main(){
____();
f[0] = 1;
for(int i = 1; i < MAXN; i++) f[i] = f[i-1] * i % MOD;
cin >> n;
for(int i = 1; i <= n; i++){
int x; cin >> x;
A[x]++;
}
// g[i][x]: 前i个盒子x个不合法的case
// ret = sigma_{x=0}^{n} (-1)^x * g[x] * (n-x)!
g[0] = 1;
for(int i = 1; i <= n; i++) for(int j = i; j >= 1; j--) g[j] = (g[j] + g[j-1] * A[i]) % MOD;
LL ret = 0;
for(int i = 0, j = 1; i <= n; i++, j *= -1) ret = (ret + j * g[i] * f[n-i]) % MOD;
cout << (ret+MOD)%MOD << endl;
return 0;
}
牛客练习赛64 D【容斥+背包】的更多相关文章
- 牛客练习赛64 如果我让你查回文你还爱我吗 线段树 树状数组 manacher 计数 区间本质不同回文串个数
LINK:如果我让你查回文你还爱我吗 了解到了这个模板题. 果然我不会写2333... 考试的时候想到了一个非常辣鸡的 线段树合并+莫队的做法 过不了不再赘述. 当然也想到了manacher不过不太会 ...
- 牛客练习赛64 红色的樱花 exgcd 贪心
LINK:The red sakura 暴怒狂樱 血染京都. 这题质量不咋地 这题也没啥营养. 不过还是存在值得学习的地方的. 一个trick n行 m列 第一行与第n行相连 第1列和第m列相连的时候 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
随机推荐
- 如何制作sitemaps网站地图
如何制作sitemaps网站地图 1.0 前言 1.1 xml格式 1.2 常见问题 本文资料来源于网站 1.0 前言 Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页.最简 ...
- 【JavaWeb】HTML&CSS 基础
HTML&CSS 基础 HTML 基础 HTML 标签 HTML标题:HTML 标题(Heading)是通过 h1 - h6 等标签进行定义的. HTML段落: HTML 段落是通过 p 标签 ...
- Flutter 布局类组件:流式布局(Wrap和Flow)
前言 把超出屏幕显示范围会自动折行的布局称为流式布局.Flutter中通过Wrap和Flow来支持流式布局,将Row换成Wrap后溢出部分则会自动折行. Wrap 接口描述 Wrap({ Key ke ...
- Flutter 布局类组件:弹性布局(Flex)
前言 弹性布局允许子组件按照一定比例来分配父容器空间,Flutter中的弹性布局主要通过Flex和Expanded来配合实现. Flex Flex组件可以沿着水平或垂直方向排列子组件,如果你知道主轴方 ...
- 【Docker】Docker启动停止重启 Redirecting to /bin/systemctl start docker.service
[root@liuawen local]# docker -v Docker version 1.13.1, build cccb291/1.13.1 [root@liuawen local]# 启动 ...
- 【Linux】NFS相关小问题
NFS一些小问题: 1. 由于实验环境中,给了rw权限,但是执行的时候,还是提示Permission denied 于是查看nfs服务端,查看/etc/exports文件是否配置有问题 网上很多人配置 ...
- 1.2V转5V稳压芯片,低功耗电路
PW5100具有将低输入电压0.7V-5V之间的范围,升压型,升压到5V的稳定电压输出. 可以使其镍氢电池1.2V稳定输出5V的1.2V转5V芯片. PW5100具有极低的输入静态功耗,1.2V时,应 ...
- Python Debug工具
最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print.那么该工具有哪些优点呢,如何使用该工具呢.本文就介绍该工具的优缺点和使用方式. 前言 ...
- STL_map和multimap容器
一.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺 ...
- 解决 browser-sync start --server --files 文件不能同步的问题!
解决 browser-sync start --server --files 文件不能同步的问题! 请看我的源命令: browser-sync start --server --file 'test2 ...