洛谷 P6672 - [清华集训2016] 你的生命已如风中残烛(组合数学)
题解里一堆密密麻麻的 Raney 引理……蒟蒻表示看不懂,因此决定写一篇题解提供一个像我这样的蒟蒻能理解的思路,或者说,理解方式。
首先我们考虑什么样的牌堆顺序符合条件。显然,在摸牌任意时刻,你手中的牌允许你继续无限制摸的牌是一段区间,即存在一个位置 \(p\),满足你在不使用新摸出来的牌的机会下能够恰好摸到第 \(p\) 张牌。考虑如果我们新摸出来一张牌会产生怎样的影响,假设摸出一张 \(w_i=x\) 的牌,那么我们肯定会在耗完目前手中牌的机会,也就是摸完第 \(p\) 张牌后使用该牌,这样我们恰好会在摸第 \(p+1,p+2,\cdots,p+x\) 张牌时使用这张牌摸牌的机会。因此我们考虑将原问题转化为一个区间覆盖的问题,一个点覆盖了即意味着该点能够被摸到,考虑这样的过程:
Process:我们从左到右扫一遍,如果扫到一个 \(w_i>0\) 的点,就在该点后面找到距离该点最近的一段长度为 \(w_i\) 且区间中所有点都没有被覆盖的区间,并将这段区间所有点都设为被覆盖,那么一个牌堆符合条件当且仅当不存在某个 \(\le m\) 的位置没有被覆盖。
这个过程看起来有点鸡肋,我们考虑稍微变换一下,我们不一定要覆盖完整的区间,我们只需要向后找到 \(w_i\) 个没有覆盖的点并将它们设为被覆盖即可,不难发现这样不合法的情况,在我们新的过程中依然不合法,原来合法的情况依旧合法。
这样还是不好直接维护,不过思路理到这一步,做过 CF838D Airplane Arrangements 的同学们应该会感到特别熟悉。没错,这道题和那道题安排飞机座位的过程是完全一致的。按照那题的套路,我们在后面补上一个 \(m+1\) 号点,并将这个问题放到一个环上,那么一个牌堆符合条件当且仅当第 \(m+1\) 个位置没有被占用。不难发现由于没有被占用的位置只有一个,因此我们考虑做这样一个变换:将牌堆沿着环按顺时针方向分别旋转 \(1,2,3,\cdots,m\),那么由于环的对称性,对于一个合法的牌堆,在这些变换后的牌堆中,空着的位置分别是 \(1,2,3,\cdots,m\),也就是说全部 \(m+1\) 个位置是等价的,因此我们只用拿总方案数除以 \(m+1\) 即可。那么怎么计算总方案数呢?\(m!\)?Nope。由于我们引入了一个 \(m+1\) 位置,因此我们也要相应地添上一个 \(0\),因此总共 \((m+1)!\) 种可能,但由于我们新增的 \(0\) 与其他 \(0\) 并没有区别,也即,所有 \(0\) 都可以充当这个新增的 \(0\),对于每个合法的牌堆我们答案重复计算了 \(m-n+1\) 次,因此答案还需除以 \(m-n+1\)。
于是
\]
#include <cstdio>
using namespace std;
const int MOD=998244353;
int n,m,res=1;
int main(){
scanf("%d",&n);
for(int i=1,x;i<=n;i++) scanf("%d",&x),m+=x;
for(int i=1;i<=m;i++) if(i^(m-n+1)) res=1ll*res*i%MOD;
printf("%d\n",res);
return 0;
}
洛谷 P6672 - [清华集训2016] 你的生命已如风中残烛(组合数学)的更多相关文章
- UOJ273 [清华集训2016] 你的生命已如风中残烛 【数学】
题目分析: 把$0$卡牌看成$-1$.题目要求前缀和始终大于等于$1$. 最后添加一个$-1$,这样除了最后一位之外大于等于1,最后一位等于0. 构造圆排列.这样的话一个圆排列只有一个满足的情况,然后 ...
- 洛谷 P6667 - [清华集训2016] 如何优雅地求和(下降幂多项式,多项式)
题面传送门 wjz:<如何优雅地 AK NOI> 我:如何优雅地爆零 首先,按照这题总结出来的一个小套路,看到多项式与组合数结合的题,可以考虑将普通多项式转为下降幂多项式,因为下降幂和组合 ...
- P6672-[清华集训2016]你的生命已如风中残烛【结论】
正题 题目链接:https://www.luogu.com.cn/problem/P6672 题目大意 长度为\(m\)的序列\(a\),有\(n\)个数字不是\(0\),其他\(m-n\)个是\(0 ...
- 洛谷 P2260 [清华集训2012]模积和 || bzoj2956
https://www.lydsy.com/JudgeOnline/problem.php?id=2956 https://www.luogu.org/problemnew/show/P2260 暴力 ...
- 洛谷P2260 [清华集训2012]模积和(容斥+数论分块)
题意 https://www.luogu.com.cn/problem/P2260 思路 具体思路见下图: 注意这个模数不是质数,不能用快速幂来求逆元,要用扩展gcd. 代码 #include< ...
- 洛谷 P4002 - [清华集训2017]生成树计数(多项式)
题面传送门 神题. 考虑将所有连通块缩成一个点,那么所有连好边的生成树在缩点之后一定是一个 \(n\) 个点的生成树.我们记 \(d_i\) 为第 \(i\) 个连通块缩完点之后的度数 \(-1\), ...
- UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]
#274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...
- UOJ_274_[清华集训2016]温暖会指引我们前行_LCT
UOJ_274_[清华集训2016]温暖会指引我们前行_LCT 任务描述:http://uoj.ac/problem/274 本题中的字典序不同在于空串的字典序最大. 并且题中要求排序后字典序最大. ...
- UOJ 275. 【清华集训2016】组合数问题
UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...
随机推荐
- 使用vue-cli+webpack搭建vue开发环境
在这里我真的很开心,好久没有用过博客,今天突然看到了我的博客有不少人看过,虽然没有留下脚印,但是还是激起了我重新拿起博客的信心,感谢大家. 在这里我们需要首先下载node,因为我们要用到npm包下载, ...
- SharkCTF2021 The_nature_of_the_human
(信安数基的quiz1写不出来 来这放题解泄愤) crypto类题. 题面 其加密的大致过程是,对明文flag中的逐个字符,随机使用三种加密方式: 第一种,对该字符进行sha256加密后以16进制形式 ...
- netty传输java bean对象
在上一篇博客(netty入门实现简单的echo程序)中,我们知道了如何使用netty发送一个简单的消息,但是这远远是不够的.在这篇博客中,我们来使用netty发送一个java bean对象的消息,但是 ...
- C语言单片机项目实战超声波雷达测距
本实验是基于MSP430利用HC-SR04超声波传感器进行测距,测距范围是3-65cm,讲得到的数据显示在LCD 1602液晶屏上. 模块工作原理如下 (1)采用 IO 触发测距,给至少 10us 的 ...
- stm32学习笔记之串口通信
在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Confi ...
- linux上docker形式部署GB28181服务wvp,zlmedia
目录 1.bash方式从镜像创建docker 2.下载vim 3.修改run.sh bug如下 4.修改application.xml 5.运行一下sh run.sh 6.Vim config.ini ...
- Luogu P2827 [NOIp2016提高组]蚯蚓 | 神奇的队列
题目链接 80分思路: 弄一个优先队列,不停地模拟,切蚯蚓时就将最长的那一条出队,然后一分为二入队,简单模拟即可.还要弄一个标记,表示从开始到当前时间每一条蚯蚓应该加上的长度,操作时就加上,入队时就减 ...
- hdu 1506 Largest Rectangle in a Histogram(DP)
题意: 有一个柱状图,有N条柱子.每一条柱子宽度都为1,长度为h1...hN. 在这N条柱子所构成的区域中找到一个最大面积,每平方米3块钱,问最多赚多少钱. 输入: 1<=N<=10000 ...
- 深入浅出:了解时序数据库 InfluxDB
数据模型 1.时序数据的特征 时序数据应用场景就是在时间线上每个时间点都会从多个数据源涌入数据,按照连续时间的多种纬度产生大量数据,并按秒甚至毫秒计算的实时性写入存储. 传统的RDBMS数据库对写入的 ...
- php swoft redis 发布和订阅
//订阅 public function subscribe() { /* @var \Swoft\Redis\Redis $redis */ $redis = App::getBean(\Swoft ...