A [yLOI2019] 青原樱

Background

星川之下皆萤火尘埃

我独行在人潮你天真而待

相遇若是借丹青着色

青原上 绯樱如海

——银临《青原樱》(Cover 人衣大人)

Description

给定 \(n\) 个位置,要求放下 \(m\) 个互不相同的东西,东西两两之间不能相邻,求方案数对 \(p\) 取模的结果。

Limitations

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

特殊性质2:保证 \(p\) 是一个质数。

对于 \(100\%\) 的数据,保证 \(1 \leq p \leq 10^9\),\(1 \leq m \leq \lceil \frac{n}{2} \rceil\)

Solution

子任务 \(1\):

显然 \(n = m = 1\),所以共有 \(1\) 种方案,但是直接输出 \(1\) 是没有分的,因为这个点的 \(p = 1\),应该输出 \(1 \bmod 1 = 0\)。

期望得分 \(5~pts\)

子任务 \(2\):

考虑方案数不超过 \(10^6\),因此只要在爆搜的时候保证搜索树上每个节点的情况都是合法的且他的后代一定至少存在一种合法的方案即可。考虑搜索树的最后一层节点数是 \(O(ans)\) 的,树共有 \(O(n)\) 层,因此总复杂度 \(O(n \times ans)\),期望得分 \(15~pts\)

子任务 \(3\):

数数题,考虑DP。

先不考虑幼苗的编号,设 \(f_{i, j}\) 为放了 \(i\) 个幼苗,第 \(i\) 个幼苗在位置 \(j\) 的方案数,转移显然:

\[f_{i, j} = \sum_{k = 0}^{j - 1}f_{i - 1,k}\]

初始化为 \(f_{0, 0} = 1\)。注意由于这里幼苗是互不相同的,因此算出答案以后要乘上 \(m!\)。

共有 \(O(nm)\) 个状态,每次转移是 \(O(n)\) 的,总复杂度 \(O(n^2m)\),期望得分 \(20~pts\)

子任务 \(4\):

考虑上面的转移方程显然可以对每个 \(i\) 维护一个前缀和来让转移变成 \(O(1)\),于是总复杂度 \(O(nm)\),期望得分 \(20~pts\)

子任务 \(5\):

DP看起来已经到了尽头,无论如何状态数都不可能低于 \(O(nm)\),于是考虑组合数学。

考虑将所有的方案分为两类:对于所有的第 \(n\) 个位置没有树苗的方案,归为第一类方案,有树苗的方案归为第二类方案。显然这两类方案囊括了所有可能的情况且互不相同。

先考虑第一种情况,第 \(n\) 个位置没有树苗。那么对于所有的 \(m\) 个树苗,显然每个树苗后面都紧跟着一个空位,如果将每个树苗和他后面的紧跟着的空位看作一个物品,那么问题就变成了共有 \((n - m)\) 个位置,在这 \((n - m)\) 个位置种选择 \(m\) 个位置,放上 \(m\) 个物品,摆放方式没有限制,求方案数。根据排列数的定义,共有 \(C_{n - m}^m\) 种方式。注意到这样求出的方案是 \(m\) 个物品相同的方案,由于要求 \(m\) 个物品互不相同的方案,答案应该乘上 \(m!\)。于是这种情况的方案数是 \(m! \times C_{n - m}^m\)。

再考虑第二种情况,第 \(m\) 个位置有树苗,那么对于前面的 \((n - 1)\) 个树苗,每个树苗后面都紧跟着一个空位,同样的我们将树苗和空位捆绑在一起看,那么不考虑最后一个树苗,问题变为有 \([(n - 1) - (m - 1) = n - m]\) 个位置,在这些位置种选择 \((m - 1)\) 个,共有 \(C_{n - m}^{m - 1}\) 种方式。注意到最后一个树苗的选择一共有 \(m\) 种情况,所以在 \(m\) 个树苗相同时的方案数应是 \(m \times C_{n - m}^{m - 1}\)。对于前面 \((m - 1)\) 个物品,有 \((m - 1)!\) 种排列方式,因此这种情况的总方案数为 \(m!~\times~C_{n - m}^{m - 1}\)

由于保证了模数 \(p\) 是一个质数,因此 \(O(n)\) 处理逆元后 \(O(n)\) 计算即可。期望得分 \(20~pts\)

子任务 \(6\):

如果你足够机智(划掉。如果你不像扶苏一样傻),你就可以发现第一种方案的方案数 \(m! \times C_{n - m}^m~=~A_{n - m}^m\),第二种方案的方案数 \(m! \times C_{n - m}^{m - 1}~=~m \times A_{n - m}^{m - 1}\)。所以根本不需要处理逆元,直接做即可。

当然,由于代数恒等式 \(A_x^y + y \times A_x^{y - 1} = A_{x + 1}^y\),可以直接求 \(A_{n - m + 1}^{m}\),时间复杂度 \(O(n)\),期望得分 \(20~pts\)。

【组合数学】【P5520】[yLOI2019] 青原樱的更多相关文章

  1. P5520 【[yLOI2019] 青原樱】

    P5520 [[yLOI2019] 青原樱]题解 整理博客的时候改了下分类标签,重新审一下 题目传送门 翻了翻题解区,发现基本没和我写的一样的(主要是都比我的写的简单 看题目: 第一眼,数学题:第二眼 ...

  2. 洛谷P5520 【[yLOI2019] 青原樱】

    这题是小学奥数啊. 题意:求\(m\)个不同物品两两不相邻的方案数. 直接排列组合. 我们可以减掉他们之间最少需要空出来的位数--\(m-1\)个空位 像这样,我们只用留\(m-1\)个空位放在每两个 ...

  3. asp.net MVC4——省市三级联动数据库

    数据库设计

  4. 通用js地址选择器

    用js实现通用的地址选择器,省份,城市,地区自动关联更新 点击下面查看详细代码: http://runjs.cn/code/s8sqkhcv 关键地址库代码: var addr_arr = new A ...

  5. java 随机生成身份证代码

    import java.util.Calendar; import java.util.Collection; import java.util.HashMap; import java.util.I ...

  6. 全国城市三级联动 html+js

    全国城市三级联动,没有css,所以屏幕的自适应必须自己想办法,手机端慎用(最好不要用,因为有些我也说不出的展示问题). html页面 <!DOCTYPE html> <html> ...

  7. 省市级联.net

    初学javascript,编译省市级联,使用json在一般处理程序中编译,利用ajax传递数据到web前台 <html xmlns="http://www.w3.org/1999/xh ...

  8. Android 三级联动选择城市+后台服务加载数据库

    技术渣,大家将就着看 首先我们需要一个xml数据保存到数据库,这里我从QQ下面找到一个loclist.xml文件 <CountryRegion Name="中国" Code= ...

  9. react 写的省市三级联动

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Ba ...

随机推荐

  1. Lsyncd实时同步搭建指南

    linux文件实时同步: inotify+rsync.sersync.lsyncd工具比较 一.inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify ...

  2. Excel技能提升

    函数 字符串全半角之间的转换 ASC将全角英文字母转换为半角英文字母,其语法是ASC(text) WIDECHAR()将半角英文字母转换为全角英文字母,语法是=WIDECHAR(text) find( ...

  3. app 崩溃测试 (转:CSDN 我去热饭)

    首先,崩溃有几种情况: 闪退 提示停止运行 无响应 ( 不同情况虽然没有严格意义上区分开引起原因,但是都有侧重.在之后的工作中,我会实时补充统计.) 1.接口返回值 [直接原因]:app无法解析接口返 ...

  4. 第一次有人把 5G 讲的这么简单明了

    一个简单且神奇的公式    今天的故事,从一个公式开始讲起.这是一个既简单又神奇的公式.说它简单,是因为它一共只有 3 个字母.而说它神奇,是因为这个公式蕴含了博大精深的通信技术奥秘,这个星球上有无数 ...

  5. eclipse自定义导入或者编写版本格式化 xml

    1.自定义或者自己导入版本格式 window——preferences——java——Code style ——formatter(New 或者 import)

  6. 用友 UIFrom

    任何表单,有两个字段是必须的,一个是ID,一个是版本号

  7. sql中别名加as和不加as的区别

    select UserName as 用户名,PassWord as 密码 from user 与 select UserName 用户名,PassWord 密码 from user 中as用于不用的 ...

  8. 两道JVM面试题,竟让我回忆起了中学时代!

    作者:肥朝 原文链接:https://mp.weixin.qq.com/s/4wJ6ANal0blLOseasfIuVw 中学授课模式 考虑到可能有部分粉丝对JVM参数不清楚,所以我们参照中学的授课模 ...

  9. JAVA WEB面试总结

    本文目录: 1. 什么是cookie 2. 什么是session 3.什么是Servlet,Servlet生命周期方法 4.JSP隐含对象 5.JSP的四个域对象的作用范围 6.转发和重定向的区别 7 ...

  10. docker基础应用

    环境: centos 7  docker 19.03.0-beta3  192.168.10.10 关于如何安装docker请参考:https://www.cnblogs.com/caesar-id/ ...