首页 > 其他分享 >ABC270H add 1

ABC270H add 1

时间:2024-01-17 19:24:48浏览次数:29  
标签:ix frac limits mathscr sum nx add ABC270H

题解里面有用鞅的停时定理的做法,但我现在既不会离散时间鞅也不记得这个定理是啥了,所以搞点阳间的做法。

考虑列出操作次数的概率生成函数 \(\mathscr{P}(x)\),也就是从初始状态开始操作 \(i\) 次后第一次达到终止状态的概率为 \([x^i]\mathscr{P}(x)\),那么答案就是 \(\mathscr{P}'(1)\)。

注意到 \([x^i]\mathscr{P}(x)\) 有限制 \(i\) 为第一次达到终止状态,那么我们不如假设达到终止状态后继续操作。

列出另外两个 PGF,设 \([x^i]\mathscr{F}(x)\) 表示从初始状态开始,操作 \(i\) 次后到达终止状态(不一定是第一次)的概率;\([x^i]\mathscr{G}(x)\) 表示从某个终止状态开始,操作 \(i\) 次后到达某个终止状态的概率。

不难发现 \(\mathscr{G}(x)\) 中开始的终止状态是任意的,并且有 \(\mathscr{P}=\mathscr{F}\cdot \mathscr{G}^{-1}\)。

考虑 \(\mathscr{F}\) 和 \(\mathscr{G}\) 的限制,对于 \(\mathscr G\),只要对于任意的 \(i\),最后 \(a_i\) 步不操作 \(i\) 即可;而 \(\mathscr F\) 需要多加一个操作次数 \(\ge a_n\) 的限制。于是我们发现:

  • 最后 \(a_n\) 步不能选 \(n\)。
  • 最后 \(a_{n-1}\) 步不能选 \(n-1\)。
  • \(\cdots\)
  • 最后 \(a_2\) 步不能选 \(2\)。

即:

  • 最后 \(a_2\) 步不能选 \(2,3,\cdots,a_n\)。
  • 此前 \(a_3-a_2\) 步不能选 \(3,4,\cdots,a_n\)。
  • \(\cdots\)
  • 此前 \(a_{n}-a_{n-1}\) 步不能选 \(n\)。

那么令:

\[S_i=\prod\limits_{j=1}^{i-1}\left(\frac{j}{n}\right)^{a_{j+1}-a_j} \]

\[P_i=\max\limits_{a_j\le i}j \]

由于 \([x^i]\mathscr{G}(x)\) 中只能选 \(j\le P_i\) 的位置 \(j\) 操作,并且前 \(i-a_{P_i}\) 的时刻可以随便选,那么有:

\[[x^i]\mathscr{F}(x)=[i\ge n]S_n \]

\[[x^i]\mathscr{G}(x)=S_{P_i}\left(\frac{P_i}{n}\right)^{i-a_{P_i}} \]

于是:

\[\mathscr{F}(x)=\frac{S_nx^{a_n}}{1-x} \]

\[\begin{aligned}\mathscr{G}(x)&=\frac{S_nx^{a_n}}{1-x}+\sum\limits_{i=1}^{n-1}\sum\limits_{j=a_i}^{a_{i+1}-1}S_i\left(\frac{i}{n}\right)^{j-a_i}x^j\\&=\frac{S_nx^{a_n}}{1-x}+\sum\limits_{i=1}^{n-1}S_ix^{a_i}\sum\limits_{j=0}^{a_{i+1}-a_i-1}\left(\frac{i}{n}\right)^jx^j\\&=\frac{S_nx^{a_n}}{1-x}+\sum\limits_{i=1}^{n-1}\frac{1-\left(\frac{ix}{n}\right)^{a_{i+1}-a_i}}{1-\frac{ix}{n}}\\&=\frac{S_nx^{a_n}}{1-x}+\sum\limits_{i=1}^{n-1}\frac{S_ix^{a_i}\left(1-\left(\frac{i}{n}\right)^{a_{i+1}-a_i}\cdot x^{a_{i+1}-a_i}\right)}{n-ix}\\&=\frac{S_nx^{a_n}}{1-x}+\sum\limits_{i=1}^{n-1}\frac{n(S_ix^{a_i}-S_{i+1}x^{a_{i+1}})}{n-ix}\end{aligned} \]

特殊地,这里定义 \(S_1=1\)。

考虑到 \(\mathscr{P}=\mathscr{F}\cdot \mathscr{G}^{-1}\),那么:

\[\mathscr{P}'(1)=\frac{\mathscr{F}'(1)\mathscr{G}(1)-\mathscr{F}(1)\mathscr{G'}(1)}{\mathscr{G}^2(1)} \]

但是这里 \(x=1\) 时 \(\mathscr {F,G}\) 是没有意义的,于是令 \(\mathscr F,\mathscr G\) 均乘上 \(1-x\):

\[\mathscr{F}(x)=S_nx^{a_n} \]

\[\mathscr{G}(x)=S_nx^{a_n}+n\sum\limits_{i=1}^{n-1}\frac{1-x}{n-ix}(S_ix^{a_i}-S_{i+1}x^{a_{i+1}}) \]

于是 \(\mathscr G(1)=\mathscr F(1)=S_n\),令:

\[\mathscr H(x)=\sum\limits_{i=1}^{n-1}\frac{1-x}{n-ix}(S_{i+1}x^{a_{i+1}}-S_ix^{a_i}) \]

\[\begin{aligned}\mathscr H'(1)&=\sum\limits_{i=1}^{n-1}\frac{(n-i)(S_{i+1}a_{i+1}-S_ia_i-S_{i+1}(a_{i+1}+1)+S_i(a_i+1))}{(n-i)^2}\\&=\sum\limits_{i=1}^{n-1}\frac{S_{i+1}-S_i}{n-i}\end{aligned} \]

所以:

\[\begin{aligned}\mathscr P'(1)&=\frac{\mathscr F'(1)-\mathscr G'(1)}{S_n}\\&=\frac{n}{S_n}\cdot \mathscr{H}'(1)\\&=\frac{n}{S_n}\sum\limits_{i=1}^{n-1}\frac{S_{i+1}-S_i}{n-i}\end{aligned} \]

然后就可以 \(O(n\log P)\) 做了。目前还是最优解。

标签:ix,frac,limits,mathscr,sum,nx,add,ABC270H
From: https://www.cnblogs.com/Ender32k/p/17970838

相关文章

  • caddy
    使用Caddy生成自动SSL证书非常简单,Caddy内置了对Let'sEncrypt的支持,并且可以自动申请、配置和更新SSL证书。以下是使用Caddy创建一个反向代理并自动获取SSL证书的基本步骤:安装Caddy:对于大多数Linux发行版,可以通过包管理器(如apt或yum)安装,或者直接从Caddy官网下载预编译好的二进制文......
  • 无涯教程-SQL - ADDDATE()函数
    下表列出了可通过SQL使用的所有重要的与日期和时间相关的重要功能。RDBMS还支持其他各种功能。给定的列表基于MySQLRDBMS。Sr.No.Function&Description1ADDDATE()添加日期2ADDTIME()增加时间3CONVERT_TZ()从一个时区转换到另一个时区4CURDATE()返回当前日......
  • 深入了解 ReadDirectoryChangesW 并应用其监控文件目录
    简介监视指定目录的更改,并将有关更改的信息打印到控制台,该功能的实现不仅可以在内核层,在应用层同样可以。程序中使用ReadDirectoryChangesW函数来监视目录中的更改,并使用FILE_NOTIFY_INFORMATION结构来获取有关更改的信息。ReadDirectoryChangesW是Windows提供一个函数......
  • Python中的__add__()方法
      在Python中,__add__()是一个特殊方法(magicmethod),用于定义对象之间的加法操作。当你使用+运算符对两个对象进行相加时,实际上会调用对象的__add__()方法。  下面是一个简单的例子,演示了__add__()的用法:class ComplexNumber:    def __init__(self, real, i......
  • Ubuntu中用useradd创建用户后无法用su切换过去
    原因:没有设置密码,没有指定家目录和shell版本,就不能su切换到新用户解决方法:su-root//切换到root权限useradd-m-s/bin/bashnode1//-m自动创建home目录,-s指定shell版本passwdnode1//设置密码参考链接:Ubuntu中用useradd创建用户时没指定家目录和shel......
  • Modelsim add to schemetic报错及解决
    Overview类似于Modelsim这样的软件,可以综合出RTL的实际逻辑电路,因此对于了解RTL到底层电路的映射是十分方便的。Addtoschemetic最近想用schemetic看一下不等于!=这个运算符会综合出怎样的电路逻辑,因此用Modelsim跑了一个简单的demo,但在将测试代码加入schemetic时报错。 关......
  • 【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍
    前言: 在之前的项目中,我们已经使用OpenVINOTMCSharpAPI部署PaddleOCR全系列模型,但随着PaddleOCRv4版本发布以及OpenVINOCSharpAPI版本迭代,上一版本的项目已经不再适用。因此在推出的最新项目中,已经完成了对PaddleOCRv4的匹配,并且采用了最新版本的OpenVINOTMCSha......
  • 无涯教程-Redis - ZADD 命令函数
    RedisZADD命令将所有具有指定分数的指定元素添加到存储在键(key)处的排序集中。ZADD-返回值返回添加到排序集中的元素数,不包括已为其更新分数的现有元素。ZADD-语法以下是RedisZADD命令的基本语法。redis127.0.0.1:6379>ZADDKEY_NAMESCORE1VALUE1..SCORENV......
  • 部署Caddy Web服务器
    部署CaddyWeb服务器的详细方案通常涉及以下几个步骤。这里提供一个基本的部署流程示例:1.下载Caddy访问Caddy官方网站(https://caddyserver.com/download)下载适合你操作系统的Caddy二进制文件。或者,如果你使用的是支持包管理器的操作系统(如Ubuntu或CentOS),可以通过包管理器安装:#Ubu......
  • socket addr赋值
    #include<iostream>#include<string>usingnamespacestd;#include<stdint.h>#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<sys/socket.h>#include<netinet/in.h>#include<sys/soc......