江城唱晚

江城唱晚

【题目背景】

墙角那株海棠,是你种下的思念。
生死不能忘,高烛照容颜。
一曲江城唱晚,重忆当年坐灯前,
青衫中绣着你留下的线。
——银临《江城唱晚》

【问题描述】

扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题。
歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海
棠,但是如今都已枯萎,只剩下那一株,寄托着对他深深的思念。
沿着墙一共有$ n \(个位置可以种下海棠花,主人公记得自己当年和他一共种下了\) m
\(朵,由于花的特性,海棠不能紧挨着种植,也就是两朵海棠花之间最少间隔一个不种花 的空位置。但是她记不清当时海棠花具体是怎么摆放的了,所以她想知道一共有多少方 案使得\) m \(朵海棠花都被种下且两两之间不是相邻的。我们将这\) m $朵海棠花按照
$1,2,3…m \(的顺序编号,两个种花的方案不同当且仅当它们被种下的位置不同或者从左向 右数花的编号序列不同。 为了避免输出过大,答案对一个参数\) p $取模

【输入格式】

输入文件中有且仅有一组数据,只有一行四个数字,分别代表 \(type,n,m,p\)。其中
\(type\) 是一个帮助你判断测试点类型的参数,会在数据范围中说明。

【输出格式】

输出一行一个数字,代表答案对$ p $取模的结果。

【输入输出样例】

$1 3 2 19260718 $

\(2\)

【输入输出样例解释】

一共有两朵花,3 个位置。如果给花朵编号为 1,2,位置编号为 1,2,3,那么两种
方案分别如下:
位置$ 1 2 3$
方案\(1\) 花朵$1\space N/A $花朵\(2\)
方案\(2\) 花朵\(2\) $N/A $花朵\(1\)

【数据规模与约定】

子任务编号 n\(\leq\) m\(\leq\) type= 特殊性质 子任务分值
1 1 1 0 特殊性质1 5
2 20 20 1 特殊性质1 15
3 400 200 2 20
4 2000 1000 3 20
5 2000000 1000000 4 特殊性质2 20
6 2000000 1000000 5 20

​ 特殊性质\(1\):保证对应测试点的实际方案数(在取模之前)不超过\(10^6\)

​ 特殊性质\(2\):保证对应测试点的模数\(p\)是一个质数。定义整数\(x\)是一个质数当且仅当\(x\)有且只有\(1\)\(x\)两个因数。

​ 对于\(100\)%的数据,保证\(1\leq p\leq 10^9\)\(1\leq m\leq \lceil \frac{n}{2} \rceil \leq 10^6\),其中\(\lceil x \rceil\)为不小于\(x\)的最小整数。

【题解】

前言:\(zay\)神仙是把每一个子任务的方法都讲了一遍,这里主要讲\(60\)分的版本(\(DP\))和\(100\)分的版本(组合数学)

\(60\)分思路:

​ 首先设\(f_{i,j}\)表示前\(i\)朵花按顺序种下,第\(i\)朵花种在第\(j\)个位置上的方案数。于是有\(\sum_{k=1}^{j-2}{f_{i,k}}\),但是没有考虑花的序号,所以要再乘上\(n!\)。时间复杂度为\(O(n^2m)\)显然只能过第三个子任务。

​ 接下来考虑优化,我们可以用一个\(G_{i,j}\)用来维护\(\sum_{k=1}^{j-2}{f_{i,k}}\),则有\(f_{i,j}=g{i,j-2}\)。于是复杂度降到\(O(nm)\)。就不会出现这个结果了。但是也只能拿\(60\)分。

\(100\)分思路及代码:

​ 考虑最后一个位置不种花的情况,这意味着每一朵花后面都跟了一个空位。我们将花和它后面的空位看成同一个 物体,则问题变成了有$ (n-m) \(个位置,放\) m \(个物体,放置无限制。根据组合数的定义,这样选位置的方案数为\)C_{n-m}^{m}$。注意到这样仍然是不考虑花的序号的,要再乘上 \(m!\)
​ 考虑最后一个位置放花的情况,这意味着除了最后一朵花后面都跟了一个空位,我们去掉最后一个位置,剩下的花和后面的空位看成同一个物体,则同上可以计算方案数是\(C_{n-m}^{m-1}\)。同样要乘上$ m!\(。 ​ 根据加法原理,总方案数为\)$ m!(C_{n-m}{m}+C_{n-m}) $$。
​ 由于模数是质数,预处理阶乘求一下阶乘逆元,即可做到\(O(n log P)\)。但是只能过到第5个点。

​ 如果你足够机智,可以发现上面的式子可以这么化:

​ $$m!(C_{n-m}{m}+C_{n-m})=m!C_{n-m}{m}+m!C_{n-m}=A_{n-m}{m}+mA_{n-m}$$

​ 于是不用求逆元,直接求A即可。
​ 当然,由于代数恒等式 \(A_x^y+yA_x^{y-1}=A_{x+1}^y\),可以直接求\(A_{n-m+1}^m\)

​ 这样就可以\(A\)了这道题了。

posted @ 2019-06-26 20:16  蒟蒻hqk  阅读(202)  评论(0编辑  收藏  举报