平面直角坐标系的点绕原点旋转公式及证明
设点 \(A(x,y)\) 绕原点 \(O(0,0)\) 逆时针旋转 \(\beta\),则设在极坐标系下 \(A\) 的坐标为 \((r,\alpha)\)
这意味着 \(x=r \cos \alpha, y=r \sin \alpha\)
目标点 \(A'(x',y')\) 的极坐标即为 \((r,\alpha + \beta)\)
展开(其中 \(\sin\) 和 \(\cos\) 的展开参考 here):
设点 \(A(x,y)\) 绕原点 \(O(0,0)\) 逆时针旋转 \(\beta\),则设在极坐标系下 \(A\) 的坐标为 \((r,\alpha)\)
这意味着 \(x=r \cos \alpha, y=r \sin \alpha\)
目标点 \(A'(x',y')\) 的极坐标即为 \((r,\alpha + \beta)\)
展开(其中 \(\sin\) 和 \(\cos\) 的展开参考 here):
本文中使用 \(\cap\) 表示按位与,用 \(\cup\) 表示按位或
给定长度为 \(2^n\) 的数列 \(A,B\),求 \(C_i = \sum_{j \cup k = i} A_j \times B_k\)
显然有 \(O(4^n)\) 的暴力
这一部分可以参考 FMT 中的 Zeta 变换 ,即定义 \(\hat A_i\) 为序列 \(A\) 中 \(i\) 的子集和
考虑分治
对于长度为 \(2^n\) 的待求解的 \(\hat A\),我们把它分成独立的两部分,即 \([0,2^{n-1})\) 和 \([2^{n-1},2^n)\) 两个区间分别求解
然后考虑这两个区间之间的贡献,发现只有 \([0,2^{n-1})\) 对 \([2^{n-1},2^n)\) 有贡献,于是对于 \(i \in [0,2^{n-1})\),将 \(\hat A_{i}\) 加到 \(\hat A_{i+2^{n-1}}\) 中即可
时间复杂度 \(O(n 2^n)\)
小 Tips:在计算机语言中 \(\cap\) =
&
/and
, \(\cup\) =|
/or
定义长度为 \(2^n\) 的序列的 and
卷积 \(A = B * C\) 为 \(A_i=\sum_{j \cap k = i}{B_j \times C_k}\)
考虑快速计算