由于本文过长,\(\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. java 基本语法(一) 关键字与标识符

    1.java关键字的使用定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所字母都为小写具体哪些关键字: 2.保留字:现Java版本尚未使用,但以后版本可能会作为关键字使用 ...

  2. 将ipynb文件转换为markdown

    jupyter nbconvert --to markdown "3.11-matplotlib 基础.ipynb"

  3. Tips1:考虑用静态工厂方法代替构造器

    用静态工厂方法来代替构造器为外界提供对象 描述: 静态工厂方法代替构造器来给外界提供对象,创建对象依然是由构造器来完成的 创建对象和提供对象: 创建对象的方式: 构造器 提供对象来哦方式: 构造器 类 ...

  4. 第三章:View的事件体系

    3.1 View的基础知识 主要有:View的位置参数,MotionEvent和TouchSlop对象,VelocityTracker,GestureDetector和Scroller对象 3.1.1 ...

  5. Ethical Hacking - Web Penetration Testing(8)

    SQL INJECTION WHAT IS SQL? Most websites use a database to store data. Most data stored in it(userna ...

  6. VMware虚拟机网络配置详解

    VMware网络配置:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这些后面会 ...

  7. Java Properties集合基础解析

    Java Properties集合基础解析 本期学习的properties集合是项目中经常用到的操作 什么是Properties集合? java.util.Properties集合继承于Hashtab ...

  8. SpringBoot 整合Mybatis + PageHelper 实现分页

    前言: 现在公司大多数都实现了前后端分离,前端使用Vue.React.AngularJS 等框架,不用完全依赖后端.但是如果对于比较小型的项目,没必要前后端分离,而SpringBoot也基本抛弃了Js ...

  9. SUCTF2019-web Easyweb

    <?php function get_the_flag(){ // webadmin will remove your upload file every 20 min!!!! $userdir ...

  10. 【论文笔记】Self-Supervised GAN :辅助性旋转损失的自监督生成式对抗网络

    这是CVPR2019上UCLA和google brain的一个工作.模型非常简单,利用辅助损失解决GAN不稳定问题:用旋转分类将辅助分类器对label的需求去掉,使图片可以直接对自己标注类别. Sel ...