[ARC126F] Affine Sort

给定一个长为 \(N\) 的序列 \(x\) ,定义 \(f(K)\) 表示满足下述条件的 \((a,b,c)\) 个数:

  • \(1\le c\le K,0\le a,b<c\) ;
  • \((ax_i+b)\bmod c\) 递增

可以证明 \(\lim \limits_{k\to \infty} \frac{f(K)}{k^3}\) 趋向一个定值,对 998244353 取模。

\(2\le N\le 10^3,\sum\limits_{i=1}^{N}X_i\le 5\cdot 10^5\) , \(X_i\) 两两不同。

Solution

我们记 \(g(k)\) 表示 \(c=k\) 的满足条件的 \((a,b)\) 对数,则:

引理1: \(\lim\limits_{k\to \infty} \frac{g(k)}{k^2}\) 趋向一个定值 \(C\) 。

因此 \(\lim\limits_{k\to \infty}\frac{f(K)}{K^3}=\lim\limits_{K\to \infty} \sum\limits_{k=1}^{K} \frac{g(k)}{K^3}=\lim\limits_{k\to \infty}\sum\limits_{k=1}^{K}\frac{Ck^2}{K^3}=\frac{C}{3}\) 。

约定 \(\{x\}\) 表示 \(x\) 的小数部分,例如 \(\{-5.2\}=0.8\) 。于是我们将原条件转换为:\(\{\frac{ax_i+b}{c}\}\) 单调递增。

因为 \(k\to \infty\) ,不难联想到定义点集 \(D\subset \mathcal R^2\) :\(D=\{(a,b)\in [0,1]^2 | \{ax_i+b\} 单调递增 \}\) 。那么,\(g(k)\) 可以看做是满足 \(0\le a,b<k,(\frac{a}{k},\frac{b}{k}) \in D\) 的点的面积,即 \(g(k)=\text{area}(D)\)。

将这些 \(\{ax_i\}\) 都画在一个单位圆上,它们需要逆时针排布。不难发现,这个 \(\{ax_i+b\}\) 单调递增的充要条件是:\(\sum\limits_{i=1}^{n}\{a(x_{i+1}-x_i)\}=1\) 。同时若 \(a\) 合法,满足条件的 \(b\) 个数为 \(\{a(x_1-x_n)\}\) 。

而对于每个 \(i\) ,\(a\) 只有在 \(\frac{*}{|x_{i+1}-x_i|}\) 的时刻会出现断点(即小数部分 \(±1\) )。总共有 \(\sum\limits_{i=1}^{n} |x_{i+1}-x_i|\le \sum\limits_{i=1}^{n}(x_i+x_{i+1})=\mathcal O(\sum\limits_{i=1}^{n}x_i)\) 个断点。

因此将断点排序,相邻两断点间的 \(\sum\limits_{i=1}^{n}\{a(x_{i+1}-x_i)\}\) 是相同的,而区间内对 \(\text{area}(D)\) 的贡献即为 \(\int_{l}^{r} \{a(x_1-x_n)\}\) ,这是好求的(注意,是趋近于 \(l,r\) ,断点处的取值是忽略的,所以实现上有一些细节)。

时间复杂度 \(\mathcal O(\sum x_i)\) 。

[M-SOLUTIONS F] Random Tournament

有 \(n\) 个人参加比赛,给定两两之间比赛的输赢关系。

比赛规则是,将 \(n\) 个人按照 \(1\) 到 \(n\) 的顺序排列,每次可以挑相邻两人比赛,输的人离场。最后剩下的人是冠军。

求有多少个人可能成为冠军。

\(1\le n\le 2000\) 。

Solution

考虑朴素的区间 DP ,定义 \(f_{l,r,x}\) 表示只考虑区间 \([l,r]\) 的人,\(x\) 能否成为冠军。转移直接是 \(f_{l,r,x}=f_{l,x,x}\&f_{x,r,x}\) 。

注意转移下标的形式,因此定义 \(L_{l,r}\) 表示区间 \([l,r]\) 里 \(l\) 能否成为冠军,\(R_{l,r}\) 同理。

考虑转移,结论是 \(L_{l,r}=\max\limits_{l<k\le r} \{a_{l,k}\&R_{l+1,k}\&L_{k,r}\}\) ,可以这样考虑:

假设 \(l\) 和一些位置比赛,不妨 \(pos_1,\cdots,pos_k\) ,我们随便拎个 \(pos_t,pos_{t+1}\) ,如果 \(pos_{t}\) 打败 \(pos_{t+1}\) ,则可以剔除 \(pos_{t+1}\) ;如果 \(pos_{t+1}\) 打败 \(pos_{t}\) ,则可以剔除 \(pos_t\) 。

也就是说如果 \(l\) 能成为冠军,一定存在一个策略,\(l\) 只和一个位置比赛。因此 DP 式子成立。用 bitset 优化 DP 即可。

时间复杂度 \(\mathcal O(\frac{n^3}{\omega})\) 。

ARC126F的更多相关文章

随机推荐

  1. java中异常(Exception)的定义,意义和用法。举例

    1.异常(Exception)的定义,意义和用法 我们先给出一个例子,看看异常有什么用? 例:1.1- public class Test {    public static void main(S ...

  2. 三种div点击事件

    <div id="div" onclick="alert('成功')">点击</div> var oDiv = document.get ...

  3. 多态,动态方法调度(dynamic method dispatch)?

    8.多态Polymorphism,向上转型Upcasting,动态方法调度(dynamic method dispatch) 什么叫多态?简言之,马 克 - t o - w i n:就是父类引用指向子 ...

  4. 移动端input输入框把页面顶起, 收起键盘页面复原不了问题

    我相信大家平时也会遇到这种问题, 移动端 input 或者 textarea获取光标, 整个页面被顶起来, 键盘收起, 页面不复原的问题 ====>>>>  我这边提供两种解决 ...

  5. iOS全埋点解决方案-控件点击事件

    前言 ​ 我们主要介绍如何实现控件点击事件($AppClick)的全埋点.在介绍如何实现之前,我们需要先了解一下,在 UIKit 框架下,处理点击或拖动事件的 Target-Action 设计模式. ...

  6. Elasticsearch 使用-安装

    Elasticsearch 使用-安装 官方网站 https://www.elastic.co/cn/elasticsearch/ 什么是 Elasticsearch? Elasticsearch 是 ...

  7. Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想

    django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...

  8. js中的undefined

    undefined,一个特殊值,通常用于指示变量尚未赋值,是一个JavaScript的 原始数据类型 . 如果后台返回前台数据为空(无数据),那么用该对象获取其中的属性会显示undefined. 如果 ...

  9. MySQL启动过程详解二:核心模块启动 init_server_components()

    mysqld_main() 函数中,init_server_components() 函数负责MySQL核心模块的启动,包括mdl系统,Innodb存储引擎的启动等等: 1. mdl子系统初始化. 2 ...

  10. 前端性能优化之js,css调用优化

    规则1:减少HTTP请求     把多个JS请求合并为一个JS请求,把多个CSS请求合并为一个CSS请求.从而减少从客户端向服务器端的请求数.     规则3:添加Expires头     用http ...