E

直接统计原式不好做,注意到首先我们应该知道怎样的 \(x\) 序列是合法的,那么不妨首先来统计一下合法的 \(x\) 序列数量。

令 \(b_i\) 为 \(i\) 向右给的球数,那么有(\(i = 1\) 特殊考虑):

\[x_i = a_i + b_{i - 1} - b_i = a_i - (b_i - b_{i - 1})(i > 1)
\]

那么考虑令 \(b\) 的差分数组 \(d, d_i = b_i - b_{i - 1}(i > 1), d_1 = d_1 - d_n\),根据上式 \(x\) 和 \(d\) 构成双射。

但注意到 \(d\) 不与 \(b\) 构成双射,\(d\) 不方便限制大小但 \(b\) 好统计,那么不妨观察一下哪些 \(b\) 会对应同一个 \(d\)。

不难发现若将 \(b\) 整体 \(+x\) 会对应一个相同的 \(d\),反之也成立。

于是我们考虑钦定 \(\min b_i = 0\) 的序列合法,那么此时合法的 \(b\) 序列就可以与 \(x\) 构成双射且容易得到 \(x\) 序列。

那么考虑一下合法的 \(x\) 序列的数量,等价于要求:

\[\begin{cases}
\min b_i = 0 \\
b_i \le a_i (1 \le i \le n)
\end{cases}\]

容易使用容斥解决,答案为:

\[\prod (a_i + 1) - \prod a_i
\]

那么现在回到原题,注意到所求答案式子比较奇怪,那么基本上就要考虑组合意义了。

容易发现 \(\prod x_i\) 的组合意义:有 \(n\) 个盒子,第 \(i\) 个盒子有 \(x_i\) 个球,问从每个盒子拿出 \(1\) 个球的方案,球有标号。

考虑 \(\rm dp\),因为值域很大,所以不能将值域记录在状态内。

但注意到每个盒子剩下的球必定是自己拿出去剩下的和之前的盒子给过来的,确定每个盒子取自己的球还是取之前盒子的球后方案数就是独立的。

因此可以令 \(f_{i, 0 / 1, 0 / 1}\) 表示当前考虑完前 \(i\) 个盒子,当前盒子取出的球是自己剩下的还是之前盒子传过来的,当前是否选过一个 \(b_j = 0\)。

转移考虑下一个位置选球状态和当前传过去多少个球,容易优化到 \(\mathcal{O}(1)\),复杂度 \(\mathcal{O}(n)\)。

需要注意的是:因为人构成环,所以第一个人的选球状态需要一开始钦定,因此需要做两边上述 \(\rm dp\)。

F

首先我们将 \(n, m\) 都减小一,将矩阵平移到以左下角为原点。

首先考虑一个暴力,由于两个人只会恰好相遇一次,因此考虑枚举两个人的相遇点 \((p, q)\)。

那么就只要算出 \(f_{p, q}, g_{p, q}\) 分别为两个人从起点 / 终点同时走到 \((p, q)\) 的方案,两者显然等价,于是我们一下仅考虑算 \(f\)。

令第一个人在纵、横方向上分别走了 \(x_1, y_1\) 步,第二个人类似地走 \(x_2, y_2\) 步。

那么两个人在 \((p, q)\) 相遇当且仅当:

\[\begin{cases}
p + x_1 = n \\
x_2 = p\\
y_1 = y_2 = q
\end{cases}
\]

接着我们有如下观察:

  • 两个人相遇位置一定是同一行连续的一段区间。

于是我们可以考虑枚举这一行第一个相遇的位置 \((p, i)\),之后为了强制钦定两者在 \((p, q)\) 再次相遇一次,那么他们两者在横方向上一定要恰好走了 \(q - i\) 步。

容易发现两者在横方向上都走 \(q - i\) 步的方案为:\(\binom{2(q - i)}{q - i}\),那么就有转移:

\[f_{p, q} = \dbinom{n + 2q}{n} \times \dbinom{n}{p} \times \dbinom{2q}{q} - \sum\limits_{i < q} \dbinom{2(q - i)}{q - i} f_{p, i}
\]

复杂度 \(\mathcal{O}(n ^ 3)\),考虑优化。

容易发现后面的和式部分转移系数与 \(p\) 无关,那么不妨考虑将所有 \(f\) 合起来一起转移:

令 \(g_q = \sum\limits_p f_{p, q}\),那么应该有转移:

\[g_q = \dbinom{n + 2q}{n} \dbinom{2q}{q}2 ^ q - \sum\limits_{i < q} \dbinom{2(q - i)}{q - i} \times g_i
\]

但此时存在一个问题,这样无法计算得到每个点确切的值因而无法与终点到该点的方案进行合并。

问题在于上面的做法是在我们确定相遇点基础上进行的,那么我们是不是可以先不确定相遇点呢?

根据上述判定相交的方法可以发现,无论两者怎么走,若一起在纵方向上走 \(n\) 步之后在同一列就一定会相遇。

因此本质上横纵方向上的移动是独立的,纵方向上在哪个位置相遇与横方向上哪个位置相遇是无关的。

换句话说,对于纵方向上相遇的每种方案都可以与横方向上相组合。

容易发现纵方向上相遇的每种方案就是任意一种纵方向方案在第 \(n\) 个操作位置后划开,前半部分放在起点到 \((p, q)\) 的路径上,后半部分放在 \((p, q)\) 到终点的路径上。

因此我们在计算所有方案的时候可以考虑先在计算横方向操作的时候将纵方向操作位置预留,最后再将任意一种方案插入进去就可以了。

那么最终的答案就是:\(\sum\limits_i ^ m \binom{2n}{n} \times g_i \times g_{m - i}\),下面考虑如何求 \(g\)。

根据上述对 \(g\),重新的定义,我们不难发现转移:

\[g_i = \dbinom{n + 2i}{n}\dbinom{2i}{i} - \sum\limits_{j < i} \dbinom{2(i - j)}{i - j}g_j
\]

此时用半在线卷积转移 \(g\) 可以做到 \(\mathcal{O}(n \log ^ 2 n)\),还不够优秀,考虑继续优化。

我们此时发现:对于在同一行仅有横方向在走的情况下保证两个人不相遇是很容易的。

将第一个人看作左括号,第二个人看作右括号(也可以换过来),这个问题等价于问有多少个完美匹配括号序列使得其不能划分成两个完美匹配括号序列。

根据之前的经验,容易得知这就是前一项的卡特兰数。

考虑强制首尾括号匹配,那么只需要先在首尾填好括号让中间放入一个长为 \(n - 1\) 的完美匹配括号就可以与上述括号序列构成双射。

因此我们可以考虑枚举最后一个相遇的位置,那么前面的方案就可以使用钦定的方法算了:

令 \(h_i = \binom{n + 2i}{n}\binom{2i}{i}\),那么就有转移:

\[g_i = h_i - 2\sum\limits_{j < i} c_{i - j - 1} \times h_j
\]

这就是一个卷积,直接使用 \(\rm NTT\) 优化即可,复杂度 \(\mathcal{O}(n \log n)\)。

ARC-124 部分题解的更多相关文章

  1. ARC 122 简要题解

    ARC 122 简要题解 传送门 A - Many Formulae 考虑对于每个数分别算其贡献. 通过枚举该数前面的符号,借助一个非常简单的 \(\mathrm{DP}\)(\(f_{i,0/1}\ ...

  2. RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例

    测试环境:     操作系统  :  Red Hat Enterprise Linux ES release 4 (Nahant Update 4)   VMWARE     数据库     :  O ...

  3. JustOj 1032: 习题6.7 完数

    题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数". 编程序找出N之内的所有完数, ...

  4. JDOJ 1140: 完数

    JDOJ 1140: 完数 题目传送门 Description 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是&qu ...

  5. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  6. 【题解】Atcoder ARC#94 F-Normalization

    再次膜拜此强题!神级性质之不可能发现系列收藏++:首先,对于长度<=3的情况,我们采取爆搜答案(代码当中是打表).对于长度>=4的情况,则有如下几条玄妙的性质: 首先我们将 a, b, c ...

  7. [题解] Atcoder Regular Contest ARC 148 A B C E 题解

    点我看题 题目质量一言难尽(至少对我来说 所以我不写D的题解了 A - mod M 发现如果把M选成2,就可以把答案压到至多2.所以答案只能是1或2,只要判断答案能不能是1即可.如果答案是1,那么M必 ...

  8. [题解] Atcoder Regular Contest ARC 147 A B C D E 题解

    点我看题 A - Max Mod Min 非常诈骗.一开始以为要观察什么神奇的性质,后来发现直接模拟就行了.可以证明总操作次数是\(O(nlog a_i)\)的.具体就是,每次操作都会有一个数a被b取 ...

  9. [题解] Atcoder ARC 142 D Deterministic Placing 结论,DP

    题目 (可能有点长,但是请耐心看完,个人认为比官方题解好懂:P) 首先需要注意,对于任意节点i上的一个棋子,如果在一种走法中它走到了节点j,另一种走法中它走到了节点k,那么这两种走法进行完后,棋子占据 ...

  10. [题解] Atcoder Regular Contest ARC 151 A B C D E 题解

    点我看题 昨天刚打的ARC,题目质量还是不错的. A - Equal Hamming Distances 对于一个位置i,如果\(S_i=T_i\),那么不管\(U\)的这个位置填什么,对到\(S\) ...

随机推荐

  1. python学习第二天:命令行模式和python交互模式

    命令行模式 安装完python开发环境和工具之后,在Windows开始菜单选择"命令提示符",就会进入到命令行模式: 或者都可以,然后 点击enter键,弹出下图中的窗口,即命令行 ...

  2. 深度探索 OpenStack Neutron:BGP(1) 【转载】

    3.4 BGP 原文地址:http://mp.weixin.qq.com/s?src=3&timestamp=1500043305&ver=1&signature=XwiIVV ...

  3. [object_detect]使用MobileNetSSD进行对象检测

    使用MobileNetSSD进行对象检测 1.单帧图片识别 object_detection.py # 导入必要的包 import numpy as np import argparse import ...

  4. UTF-8,GBK,ANSI之间的关系和区别

    GBK应该是属于ANSI之中的,在ANSI的国际通用集,GBK是专门来解决中文编码的,是双字节的,不论中英文都是双字节,而UTF-8是才用的另外的一种编码方式,对英文是用8位,对中文使用24位,是和A ...

  5. Word批量设置表格自动调整

    1.说明 通过使用Word的宏功能, 批量设置表格, 根据窗口自动调整表格, 使所有表格的宽度和窗口一样, 而不用一个一个手动调整表格. 宏是一个批量处理程序命令, 正确地运用它可以提高工作效率. 微 ...

  6. 【】Nessus安全测试插件编写教程

    Nessus安全测试插件编写教程 作者:Renaud Deraison 翻译:nixe0n 1.怎样编写一个高效的Nessus安全测试插件 在Nessus安全测试系统中, 所有的安全测试都是由ness ...

  7. 很漂亮的一个背景控件——ribbons.js

    写博客的人都喜欢优化自己的博客主页,博主也一样,找了一些背景控件,像canvas-nest.js等等,最终选择了ribbons.js,并基于源码,稍作了一丁点的修改,这里分享出来 (function ...

  8. Kafka和RabbitMQ有哪些区别,各自适合什么场景?

    经常有人问我 有个 xx 需求,我应该用 Kafka 还是 RabbitMQ ? 这个问题很常见,而且很多人对二者的选择也把握不好. 所以我决定写篇文章来详细说一下:Kafka 和 RabbitMQ ...

  9. linux安全篇:禁止频繁访问的ip访问nginx

    实验环境 版本:redhat6.5ip:172.16.1.100,172.16.10软件:nginx 172.16.1.10部署nginx [root@localhost tools]# lsngin ...

  10. (onlyoffice)在CentOS及其衍生产品上安装Linux的Document Server

    介绍 Document Server是一个在线办公套件,包括用于文本,电子表格和演示文稿的查看器和编辑器,与Office Open XML格式完全兼容:.docx,.xlsx,.pptx,并支持实时协 ...