P14686 Charity Raffle
前置知识:插板法模板,容斥原理(只看懂 OI-Wiki 第一节水平)。
才不告诉你就是作者的水平啦。
-
学会读题
问的是结果的种类!不是奖品券的排列组合! -
尝试思考
这题我会啊!\(k\) 分成 \(n\) 组,插板法唐题啊! -
提出问题
要求每组都不超过 \(m\),还有一个神奇的使用限制。 -
分析问题
假如 2024ing 决定通过写一个简单的 dfs 解决前面两个问题打暴力,
如何判断一个序列是否合法? -
举出例子
- 考虑:形如 \(\set{0,0,0,0,\cdots,k}(k>0)\) 的序列一定非法。
- 总结:全零中有一个 \(2\) 以上的数字一定非法。
- 总结:降序排序后第一项比第二项大二及以上一定非法。
- 考虑:末项是最大值,且比第二大的数大,一定非法。
- 总结:最大值只有一个,且第二大的数在他前面,一定非法。
-
尝试思考
4 中三五两条限制能否完美刻画限制?
或者说,满足了限制,能否构造出一种合法方案?
若非零数仅有一个,则操作 \((i,n)\),可以满足。
若非零数只有两个(这里选择前两大的数字),可以通过更替操作满足。
若还有其他数字,可在完成以上操作后一次次去干。 -
刻画要求
要求序列最大值不超过 \(m\),且最大值恰好比次大值大一,
同时末项不是唯一最大值的,插板法唐题序列个数。 -
继续挣扎
用一个写橙题 dp 的人的眼光,不枚举最大值,这题没法整。
发现枚举最大值之后,直接消去一个限制,很像正解。
看一眼时空限制,随便唐式分讨拆分啊。
下设 \(x\) 分到 \(n\) 个数里面,每个数不超过 \(m\) 方案数为 \(f(x,n,m)\)。
下设最大值为 \(q\)。
分成两种情况:- 最大值只有一个
钦定最大值和次大值,剩下的变成插板法唐题,要求每组不超 \(q-1\)。
这里注意作者开始没想到的一点,最大值要在次大值前面,
方案数为 \(\frac{(n-1)(n-2)}2\)。
答案为 \(\sum_{q=1}^m [(n-2)(n-1)/2\cdot f(k-2q+1,n-2,q-1)]\)。 - 最大值不止一个
钦定两个最大值,剩下的变成插板法唐题,要求每组不超 \(q\)。
答案为 \(\sum_{q=1}^m[n(n-1)\cdot f(k-2q,n-2,q)]\)。
- 最大值只有一个
-
略见分晓
问题转化成快速求 \(f(x,n,m)\)。 -
思考一下
不会…… -
看视频解锁 OI-Wiki
这里也可以自己去看,或者看下面这个很不严谨的大白话。
首先复习一下,由插板法,如果没有限制,答案就是 \(C_{x+n-1}^{n-1}\)。
由容斥,我们知道,
答案是无限制-(至少一个不符合条件-至少两个不符合条件+至少三个不符合条件-...)。
而“至少……个不满足条件(也就是超过 \(k\))”这个条件,
本质上分两步,一步是枚举钦定哪几个组非法,然后再对应求方案。
前面一个就是组合数定义啊!
后面的可以考虑减去他们的下界,然后就转化成插板法唐题了!
开心!
推一下式子:
- 一步之遥
式子就推到这里,展开太恶心了,但能过吗?
看起来时间复杂度不太乐观,预处理阶乘和逆元不算,
后面时间复杂度看起来是什么调和级数,据说是 \(O(k\ln k)\) 级别的,
其他题解(当然思路好像不太一样)说这题应该是线性,总之试一下再说了。

浙公网安备 33010602011771号