洛谷 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)$ 三个物品中选 ...
随机推荐
- 【Java虚拟机3】类加载器
前言 Java虚拟机设计团队有意把类加载阶段中的"通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类. ...
- Coursera Deep Learning笔记 结构化机器学习项目 (下)
参考:https://blog.csdn.net/red_stone1/article/details/78600255https://blog.csdn.net/red_stone1/article ...
- Java版人脸检测详解下篇:编码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 浅析ReDoS的原理与实践
转载于http://www.freebuf.com/articles/network/124422.html ReDoS(Regular expression Denial of Service) 正 ...
- cf13B Letter A(分类+简单计算几何,,)
题意: 给三个线段(每个线段的两个端点的坐标),问这三个线段能否组成字母A. 组成字母A的条件: 1.两个线段有公共端点. 2.这两个线段夹角小于等于90度. 3.第三个线段的两个端点分别在这两个线段 ...
- Spring事务的介绍,以及基于注解@Transactional的声明式事务
前言 事务是一个非常重要的知识点,前面的文章已经有介绍了关于SpringAOP代理的实现过程:事务管理也是AOP的一个重要的功能. 事务的基本介绍 数据库事务特性: 原子性 一致性 隔离性 持久性 事 ...
- Oracle的主要组件和基本概念
oracle 简介 oracle(甲骨文)公司 1977年,三人合伙创办(Software Development Laboratories,SDL) 1979年,更名为Relational Soft ...
- css语法规范、选择器、字体、文本
css语法规范 使用 HTML 时需要遵从一定的规范,CSS 也是如此.要想熟练地使用 CSS 对网页进行修饰,首先需要了解CSS 样式规则. CSS 规则由两个主要的部分构成:选择器以及一条或多条声 ...
- Git 修改已提交的commit注释
两种情况: 1.已经将代码push到远程仓库 2.还没将代码push到远程仓库,还在本地的仓库中 这两种情况下的修改大体相同,只是第一种情况最后会多一步 下面来说怎么修改 先搞清楚你要修改哪次的提交注 ...
- The Ninth Week (Lucklyzpp)
The Ninth Week (Lucklyzpp) 1.简述DNS服务器原理,并搭建主-辅服务器. [10:36:39 root@lucklyzpp ~]#vim /etc/named.conf ...