由于本文过长,\(\LaTeX\) 炸了,分两篇,part2

题目描述

定义一个正整数序列为好序列,当且仅当如果某个数 \(k\) 出现过,那么一定有 \(k-1\) 在最后一个 \(k\) 的前面出现过。

对于所有 \(i\in[1,n]\),求出 \(i\) 在所有好序列中出现次数的和

Easy Version:\(n\leq 5000\)

Hard Version:\(n\leq 10^5\)

题解

领略到了国际计数顶尖水平。。

问题转化

有重复元素的正整数序列不好统计,我们试图将它映射到排列上

我们构建一个排列 \(p\),在相邻两个数字之间填入不等号,设 \(p_{1\dots i}\) 中共有 \(num_i\) 个小于号,我们将它映射到 \(a\) 序列:\(a_{p_i}=num_i+1\),则 \(a\) 是一个好序列

证明如下:设 \(i\) 为一个小于号右边的位置,则 \(num_{i-1}+1=num_i\),即 \(a_{p_{i-1}}+1=a_{p_i}\),而由于是小于号,所以 \(p_{i-1}<p_i\),容易发现这正是题目中要求的限制

而对于一个好序列,我们从小到大枚举数值,对于每一个数值,我们将它所在的所有下标从大到小放到数列的后面(初始数列为空),这样我们就完成了从好序列到排列的映射

则容易发现,这是一个双射关系

排列组合推导

这里引入欧拉数:\(\left<\begin{matrix}n\\k\end{matrix}\right>\) 表示长度为 \(n\) 的排列中,相邻数字之间的小于号数目为 \(k\) 的方案数

设 \(ans_k\) 为数字 \(k+1\) 的答案

则 \(ans_k=\sum\limits_{i=\max(k,1)}^n\left<\begin{matrix}i\\k\end{matrix}\right>\dbinom ni(n-i)!\)

什么意思呢?我们枚举产生好序列中 \(k+1\) 这个数字的位置,则前 \(i\) 个数中需要有 \(k\) 个小于号,我们再给前 \(i\) 个数分配标号,剩下的 \(n-i\) 个数随意排列

可是这个算的是排列方案数,而且还算重了

我们考虑证明算重的次数就等于该方案中 \(k+1\) 的出现次数:对于一个排列,它被计算当且仅当 \(i\) 在第 \(k\) 个小于号和第 \(k+1\) 个小于号之间,而这恰好就是 \(k+1\) 的出现次数

\(O(n^2)\) 递推欧拉数即可通过 Easy Version

补一个欧拉数的递推公式:

考虑在长度为 \(n-1\) 的排列中插入一个 \(n\) 得到长度为 \(n\) 的排列

  • 在排列的左端插入一个 \(n\),这样不会增加小于号的数量,所以这种情况从 \(\left<\begin{matrix}n-1\\k\end{matrix}\right>\) 转移来
  • 在排列的右端插入一个 nn,这样会增加一个小于号,所以这种情况由 \(\left<\begin{matrix}n-1\\k-1\end{matrix}\right>\) 转移来
  • 在某一个位置 \(i\) 和 \(i+1\) 中间插入 \(n\),其中 \(P_i<P_{i+1}\),这里会增加一个小于号,同时会破坏原来的一个小于号,所以总的小于号数量是不变的。所以它由 \(\left<\begin{matrix}n-1\\k\end{matrix}\right>\) 转移来,情况数即原排列中小于号的数量为 \(k\) 种
  • 在某一个位置 \(i\) 和 \(i+1\) 中间插入 \(n\),其中 $P_i>P_{i+1}$​,那么这里会增加一个小于号,从 \(\left<\begin{matrix}n-1\\k-1\end{matrix}\right>\),情况数即大于号的数量即 \((n-2)-(k-1)\),其中 \(n-2\) 表示长度为 \(n-1\) 的排列共有 \(n-2\) 个间隙

所以综上所述,\(\left<\begin{matrix}n\\k\end{matrix}\right>=(k+1)\left<\begin{matrix}n-1\\k\end{matrix}\right>+(n-k)\left<\begin{matrix}n-1\\k-1\end{matrix}\right>\)

下接 part2

CF1349F 【Slime and Sequences】part1的更多相关文章

  1. CF1349F 【Slime and Sequences】part2

    由于本文过长,\(\LaTeX\) 炸了,分两篇,part1 优化 我们假装不会欧拉数的通项式(其实是因为它的通项式不容易继续优化?),使用容斥代替掉欧拉数 设 \(\begin{vmatrix}n\ ...

  2. 【K8S学习笔记】Part1:使用端口转发访问集群内的应用

    本文介绍如何使用kubectl port-forward命令连接K8S集群中运行的Redis服务.这种连接方式有助于数据库的调试工作. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同 ...

  3. Part1.2 、RabbitMQ -- Publish/Subscribe 【发布和订阅】

    python 目录 (一).交换 (Exchanges) -- 1.1 武sir 经典 Exchanges 案例展示. (二).临时队列( Temporary queues ) (三).绑定(Bind ...

  4. 【字符串算法3】浅谈KMP算法

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法3]KMP算法 Part1 理解KMP的精髓和思想 其实KM ...

  5. 【leetcode 字符串处理】Compare Version Numbers

    [leetcode 字符串处理]Compare Version Numbers @author:wepon @blog:http://blog.csdn.net/u012162613 1.题目 Com ...

  6. 【九度OJ】题目1442:A sequence of numbers 解题报告

    [九度OJ]题目1442:A sequence of numbers 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1442 ...

  7. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  8. 【夯实PHP基础】PHP数组,字符串,对象等基础面面观

    本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...

  9. 【Java学习系列】第3课--Java 高级教程

    本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...

随机推荐

  1. three.js 几何体(二)

    上一篇简单的介绍了几何体的构造体参数,这一篇郭先生就更加详细的说一说(十分简单的几何体我就不说了). 1. ShapeGeometry形状几何体 形状几何体方便我们从一个或多个路径形状中创建一个单面多 ...

  2. java 面向对象(十三):面向对象的特征二:继承性 (二) 方法的重写

    1.什么是方法的重写(override 或 overwrite)?子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作. 2. 应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同 ...

  3. redis(十六):Redis 安装,部署(LINUX环境下)

    第一步:下载安装包 访问https://redis.io/download  到官网进行下载.这里下载最新的4.0版本. 第二步:安装 1.通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压 ...

  4. SQL注入环境的搭建

    使用Phpstudy搭建SQL注入环境: 1.下载phpstudy安装 2.下载sql实验环境 所用环境的代码是一个印度人的开源项目平台.里面包含了基本的各种注入类型,同时又有get和post类型,以 ...

  5. GPO - Set Date and Time for Updates

    For Windows Update, the limitation normally is a time window, disk space, network bandwidth. Create ...

  6. Qt-数据库操作SQLite

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=88 说明:本文对在Qt中操作SQLite做简要说明. SQLite:SQLite 是 ...

  7. PyQt5布局管理器

    布局分类 绝对定位:使用move方法将空间直接定死在某个坐标,不会随着窗口大小的改变而改变 可变布局:使用各种布局管理器,实现组件的位置和大小随着窗口的变化而变化 布局管理器 QHBoxLayout: ...

  8. vs coed的使用(二) 如何运行cpp文件(不用插件比如code runner)

    一.前提 1.配置好编译运行的环境,比如系统变量.vs code的settings.json 2.检查配置好的环境没有问题 我配置结果 [环境变量] [系统变量] 确定settings.json里面的 ...

  9. 题解 洛谷 P2280 【[HNOI2003]激光炸弹】

    这道题因为要求价值最大值,所以正方形应尽可能多覆盖目标,因此所得的正方形四个顶点一定在格点上. 经过分析后,我们就可以知道,该题做法就是用二维前缀和进行事前预处理,然后一个一个枚举每个点覆盖到的总价值 ...

  10. 关于虎信如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 虎信如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载ap ...