Solution -「ARC 123F」Insert Addition
大约是翻译了一下官方题解?
@Description@
对于一个整数序列 \(P=(P_{1},\dots,P_{m})\),定义 \(f(P)\) 为一个序列 \(Q\) 满足:
- \(Q_{i}=P_{i}+P_{i+1}\),其中 \(i\in[1,m)\);
- \(f(P)=(P_{1},Q_{1},\dots,P_{m-1},Q_{m-1},P_{m})\)。
给出正整数 \(a,b,N\),其中 \(a,b\leqslant N\),令序列 \(A=(a,b)\),令序列 \(B\) 为一下操作的结果:
- 做 \(N\) 次令 \(A=f(A)\).
- 删除 \(A\) 中大于 \(B\) 的数。
求 \(B_{l,\dots r}\)。
@Solution@
◆ The Coefficient Sequence
构造最终的 \(A\) 序列的过程是这样的:
a,a+b,b \\
a,2a+b,a+b,a+2b,b \\
a,3a+b,2a+b,3a+2b,a+b,2a+3b,a+2b,a+3b,b \\
\dots
\]
可以发现有对称性。此时我们先不关心 \(a,b\) 以及 \(N\) 的大小,反之,我们来观察其序列系数,也就是把每个元素看成 \(xa+yb\),其系数的 \((x,y)\),上例的序列系数即
(1,0),(1,1),(0,1) \\
(1,0),(2,1),(1,1),(1,2),(0,1) \\
(1,0),(3,1),(2,1),(3,2),(1,1),(2,3),(1,2),(1,3),(0,1) \\
\dots
\]
以下我们称其为 Coefficient Sequence。
◆ The properties of the Coefficient Sequence
现在我们来观察 Coefficient Sequence 的性质。
Observation 1:在 Coefficient Sequence 中相邻的两个二元组 \((x_{S},y_{S}),(x_{T},y_{T})\),都有: \(x_{S}y_{T}-x_{T}y_{S}=1\)。
使用数学归纳法(induction)即证。
Observation 2:对于两个 两个二元组 \((x_{S},y_{S}),(x_{T},y_{T})\),如果他们满足 \(x_{S}y_{T}-x_{T}y_{S}=1\),那么它们在 Coefficient Sequence 中相邻,即 Observation 1 是充要条件。
不会证,大概意会一下吧。
Observation 3:对于一个二元组 \((x,y)\),如果 \(\gcd(x,y)=1\),那么 \((x,y)\) 会出现在 Coefficient Sequence 中。
比较显然,以至于官方题解没有给出证明。
Observation 4:在任意时刻,所有在 Coefficient Sequence 中的 \((x,y)\) 总是呈从左到右的关于值 \(\frac{y}{x}\) 递增(令 \(\frac{x}{0}=\infty\))。
◆ The sequence \(B\) in other words
现在描述序列 \(B\) 变得更加容易,现在我们这样描述它:
对于所有二元组 \((x,y)\) 满足 \(x,y,s.t.x,y\in\mathbb{N},\gcd(x,y)=1,ax+by\leqslant N\),我们对其按 \(\frac{y}{x}\) 排序后形成一个二元组序列 \(\{(x_{i},y_{i})\}\),则 \(B_{i}=ax_{i}+by_{i}\)。
◆ Computing \(B_{n}\)
现在我们来考虑原问题的简化版,我们来计算 \(B_{n}\)。让我们把这个描述成一个计数问题(通过二分 \(\frac{y}{x}\)):
给定正整数 \(a,b,N\),以及一个有理数 \(c\)(二分的值),求二元组 \((x,y)\neq(0,0)\) 的数量,其中 \((x,y)\) 满足
- \(ax+by\leqslant N\);
- \(\gcd(x,y)=1\);
- \(\frac{y}{x}\leqslant c\)。
我们令 \(F(N)\) 为以上问题的答案,同时令 \(G(N)\) 为去掉 \(\gcd(x,y)=1\) 限制的答案。\(G(N)\) 的式子可以很方便的写出来: \(G(N)=\sum_{y=1}^{N}\max\{\lfloor\frac{N-by}{a}\rfloor-\lfloor\frac{y}{c}\rfloor+1,0\}\),同时我们还可以写出 \(G(N)=\sum_{d=1}^{N}F(\lfloor\frac{N}{d}\rfloor)\)。那么再根据 Möbius inversion formula,我们可以表示出 \(F(N)=\sum_{d=1}^{N}\mu(d)G(\lfloor\frac{N}{d}\rfloor)\)。于是计算该问题答案的复杂度就是 \(\mathcal{O}(N)\)。
但是此时我们知道了 \(B_{n}\) 的 \(\frac{y_{n}}{x_{n}}\),怎么知道 \((x_{n},y_{n})\) 呢?我们可以再做一个二分。观察出这样一个规律:若令 \(l=(1,0),r=(0,1)\),那么中间位置就是 \(l+r\)。于是我们可以再次做一个二分,利用 \(\frac{y}{x}\) 单调来做 check。
顺带一提,这个还可以使用 类欧几里得 来计算。
◆ Computing \(B_{l,\dots,r}\)
可以发现这个东西可以知二求一,于是求出 \(B_{l},B_{l+1}\) 就行了。当然也可以求出 \(B_{l},B_{r}\) 然后做二分搜索。
Solution -「ARC 123F」Insert Addition的更多相关文章
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- Solution -「ARC 126E」Infinite Operations
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Solution -「ARC 110D」Binomial Coefficient is Fun
\(\mathcal{Description}\) Link. 给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...
- Solution -「ARC 124E」Pass to Next
\(\mathcal{Description}\) Link. 有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...
- Solution -「ARC 126F」Affine Sort
\(\mathcal{Description}\) Link. 给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...
- Solution -「ARC 125F」Tree Degree Subset Sum
\(\mathcal{Description}\) Link. 给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...
- Solution -「ARC 125E」Snack
\(\mathcal{Description}\) Link. 把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...
- Solution -「ARC 058C」「AT 1975」Iroha and Haiku
\(\mathcal{Description}\) Link. 称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...
- Solution -「ARC 101E」「AT 4352」Ribbons on Tree
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...
随机推荐
- 20230611 再次升级SSD
家里常用电脑的硬盘又显得捉襟见肘,老规矩,升级SSD.幸亏几年前摸索的方法记录下来了,翻出以前的博客复习一下.为了保险起见,也重新在网上搜了一下,看是不是有新的更方便的方法,答案是没有,只是搜出很多推 ...
- Some book
## book [C++] Accelerated C++ C++ Primer 5th C++ 程序设计语言: 1 ~ 3 C++ 程序设计语言: 4 C++ 编程思想 C++ 标准库 2th C+ ...
- @Retention元注解的使用
@Retention注解标记其他的注解用于指明标记的注解保留策略:先看Java SE 8中@Target是如何声明的: package java.lang.annotation; public enu ...
- Serverless试飞员的夙愿 | 带您扶摇直上,酣畅淋漓的云上作战
上期博文带您体验了外挂云函数Demo包,感受通过云函数使用云数据库快速突破"音障",进入"长机"云函数+"僚机"云数据库的Serverle ...
- Linux系统运维之Hadoop、Hive、Flume数据处理
配置环境 主机名 IP 备注 Hadoop-Data01 192.168.0.194 Hadoop-Master/Hive/Mysql/Flume-Agent Hadoop-Data02 192.16 ...
- 基于GPT搭建私有知识库聊天机器人(一)实现原理
1.成品演示 支持微信聊天 支持网页聊天 支持微信语音对话 支持私有知识文件训练,并针对文件提问 步骤1:准备本地文件a.txt,支持pdf.txt.markdown.ppt等 步骤2:上传a.txt ...
- 图像分割_评价指标_PSNR峰值信噪比和SSIM结构相似度
PSNR psnr是"Peak Signal to Noise Ratio"的缩写,即峰值信噪比,是一种评价图像的客观标准. 为了衡量经过处理后的影像品质,我们通常会参考PSNR值 ...
- 解决Oracle jdbc驱动包maven下载失败问题
由于Oracle版权限制,其jdbc驱动包不让人随便下载,这就给maven的下载和编译带来了麻烦. 解决办法是先获取jar包(方法一:去oracle官网下载,方法二:去oracle安装目录如produ ...
- Centos7下Oracle启动命令
1.查询挂载历史记录 在root账户下使用一下命令 查看历史使用挂载的那个磁盘 # 查看挂载历史命令 history | grep mount # 调用挂载历史命令,主要是为了找到挂载Oracle的磁 ...
- Cilium系列-4-Cilium本地路由
系列文章 Cilium 系列文章 前言 在前文中我们提到, cilium install 默认安装后, Cilium 功能启用和禁用情况如下: datapath mode: tunnel: 因为兼容性 ...