用户工具

站点工具


2020-2021:teams:legal_string:各季度训练计划及训练记录:2020_08_01--2020_08_07_周报

这是本文档旧的修订版!


back

2020/08/01--2020/08/07 周报

团队训练

姜一凡

专题

比赛

题目

蒋贤蒙

专题

比赛

题目

王赵安

专题

比赛

AtCoder Beginner Contest 174 pro:5/6/6 rk:1676/9750

题目

本周推荐

姜一凡

蒋贤蒙

标签

$\text{FFT},\text{NTT}$

题意

给定两个长度为 $n$ 的序列 $a,b$。其中 $b$ 可以循环移动,求 $\min\left(\sum_{i=0}^{n-1}(a_i-b_i+x)^2\right)$,$x$ 为任意整数。

题解

$$\sum_{i=0}^{n-1}(a_i-b_i+x)^2=\sum_{i=0}^{n-1} \left(a_i^2+b_i^2-2a_ib_i+2(a_i-b_i)x+x^2\right)=\sum_{i=0}^{n-1}\left(a_i^2+b_i^2\right)+2x\sum_{i=0}^{n-1}(a_i-b_i)+nx^2-2\sum_{i=0}^{n-1}a_ib_i$$

发现不管 $b$ 如何循环移动,$\sum_{i=0}^{n-1}\left(a_i^2+b_i^2\right)$ 和 $\sum_{i=0}^{n-1}(a_i-b_i)$ 为定值。

于是 $\sum_{i=0}^{n-1}\left(a_i^2+b_i^2\right)+2x\sum_{i=0}^{n-1}(a_i-b_i)+nx^2$ 为系数确定的二次函数,可以直接求最小值,问题转化为求 $\max\left(\sum_{i=0}^{n-1}a_ib_i\right)$。

考虑倍长 $b$ 数组,再反转 $a$ 数组,于是式子转化为

$$\max_{0\le k\lt n}\left(\sum_{i=0}^{n-1}a_{n-1-i}b_{i+k}\right)$$

令 $c_i=\sum_{j=0}^i a_jb_{i-j}$,于是式子转化为

$$\max_{0\le k\lt n} c_{n-1+k}$$

考虑 $\text{FFT}$ 或 $\text{NTT}$ 求解,时间复杂度 $O(n\log n)$。

评价

$\text{FFT}$ 经典题。

王赵安

2020-2021/teams/legal_string/各季度训练计划及训练记录/2020_08_01--2020_08_07_周报.1596770738.txt.gz · 最后更改: 2020/08/07 11:25 由 jxm2001