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. linux 三剑客(awk,sed,grep)

    1.awk 在某些场景下,我们需要过滤方式希望是列来匹配,而不是sed的行来匹配,而且awk还可以嵌套for等循环去使用,拓展性强,当然awk也是最难的. awk的常用命令选项: -F fs   fs ...

  2. centos7上配置mysql8的主从复制

    注意:1.主库:10.1.131.75,从库:10.1.131.762.server-id必须是纯数字,并且主从两个server-id在局域网内要唯一. [主节点]vi /etc/my.cnf[mys ...

  3. vins_fusion学习笔记

    Vins-Fusion源码:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion 摘要 应项目需要,侧重学习stereo+gps融合 转载几篇写的比 ...

  4. 第十九节:Asp.Net Core WebApi基础总结和请求方式

    一. 基础总结 1.Restful服务改造 Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方 ...

  5. 自动化部署Ruby on Rails应用(docker + jenkins)

    docker安装参考链接docker官网jenkins中文官网 我的博客网站已经迁移到了https://johnnyting.github.io/,如果有兴趣的可以关注下.下面文章格式可能有点乱,可以 ...

  6. 深入V8引擎-AST(5)

    懒得发首页了,有时候因为贴的代码太多会被下,而且这东西本来也只是对自己学习的记录,阅读体验极差,所以就本地自娱自乐的写着吧! 由于是解析字符串,所以在开始之前介绍一下词法结构体中关于管理字符串类的属性 ...

  7. EF Core 简单使用介绍

    EF Core 是一个ORM(对象关系映射),它使 .NET 开发人员可以使用 .NET对象操作数据库,避免了像ADO.NET访问数据库的代码,开发者只需要编写对象即可. EF Core 支持多种数据 ...

  8. 2019 企叮咚java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.企叮咚等公司offer,岗位是Java后端开发,因为发展原因最终选择去了企叮咚,入职一年时间了,也成为了面试官 ...

  9. Java之路---Day17(数据结构)

    2019-11-04-23:03:13 目录: 1.常用的数据结构 2.栈 3.队列 4.数组 5.链表 6.红黑树 常用的数据结构: 包含:栈.队列.数组.链表和红黑树 栈: 栈:stack,又称堆 ...

  10. iis url 重写

    1.选择网站-找到有测url 重写 :2:选中它,在右上角有一个打开功能,点击打开 3.依然在右上角,点击添加规则 4:选择第一个,空白规则 名称随便输入,我们通常有这样一个需求,就是.aspx 后缀 ...