CodeForces 1103E. Radix sum
题目简述:对任意两个(正)十进制数$a = \overline{a_{k-1}\dots a_1a_0}$和$b = \overline{b_{k-1}\dots b_1b_0}$,定义其【十进制按位加法(Decimal digit-wise addition)】$c = a \oplus b = \overline{c_{k-1}\dots c_1c_0}$,其中$c_i = (a_i+b_i) \bmod 10$。给定$1 \leq n \leq 10^5$个正整数$0 \leq x_i < 10^5$,对每个$0 \leq k < n$,求有多少个下标序列$1 \leq i_1, i_2, \dots, i_n \leq n$,使得
$$\bigoplus_{j=1}^n x_{i_j} = k. $$
答案$\bmod 2^{58}$。
解:
建模:
设$a_k$表示$k$在$x_1, x_2, \dots, x_n$中出现的次数,定义母函数(Generating function)
$$ a(x) = a_0x^0 + a_1x^1 + a_2x^2 + \dots + a_{N-1}x^{N-1}, $$
其中$N = 10^5$。
定义【按位卷积(Digit-wise convolution)】
$$ (a \odot b) (x) = a(x) \odot b(x) = \sum_{i=0}^{N-1} \sum_{j=0}^{N-1} a_i b_j x^{i \oplus j}. $$
若记$a^{\odot m} = a^{\odot (m-1)} \odot a$且$a^{\odot 1} = a$,则对每个$0 \leq k < n$,$a^{\odot n}(x)$中$x^k$的系数即为所求。
记进制$B = 10$。实际上,$a \odot b$是一个$d = \log_B N = 5$维卷积。
多维广义离散傅里叶变换(Multidimensional general discrete Fourier transform):
设$R$是环(Ring),正整数$n \geq 1$,称$\omega$是$R$的主$n$次单位根(Principal $n$-th root of unity),若
$$ \begin{aligned} & \omega^n = 1, \\ & \sum_{j=0}^{n-1} \omega^{jk} = 0 \text{ for } 1 \leq k < n. \end{aligned} $$
特别地,若$R$是整环(Integral domain),则第二个条件可以简化为$\omega^{k} \neq 1$对$1 \leq k < n$。
记模$n$剩余类环为$\mathbb{Z}_{n} = \mathbb{Z}/n\mathbb{Z}$。令$a: \mathbb{Z}_{n} \to R$,或记作多项式
$$ a(x) = a_0x^0 + a_1x^1 + \dots + a_{n-1}x^{n-1}. $$
定义傅里叶变换将$a$变换成$b = \mathcal{F}(a)$为
$$ b_k = \sum_{j=0}^{n-1} \omega^{jk} a_j. $$
若$n = \underbrace{1+1+\dots+1}_{n} \in R$且$n^{-1}$在$R$中存在,则傅里叶变换的逆变换$a = \mathcal{F}^{-1}(b)$为
$$ a_j = n^{-1} \sum_{k=0}^{n-1} \omega^{-jk} b_k. $$
当$n^{-1}$不存在时,可退而求其次有$na = \mathcal{F}^*(b)$为
$$ na_j = \sum_{k=0}^{n-1} \omega^{-jk} b_k. $$
设$R_1, R_2, \dots, R_d$均是环,$\omega_1, \omega_2, \dots, \omega_d$依次是$R_1, R_2, \dots, R_d$的主$n_1, n_2, \dots, n_d$次单位根。
令$a: \mathbb{Z}_{n_1} \times \mathbb{Z}_{n_2} \times \dots \times \mathbb{Z}_{n_d} \to R$,或者记作多项式
$$ a(x_1, x_2, \dots, x_n) = \sum_{i_1=0}^{n_1-1} \dots \sum_{i_d=0}^{n_d-1} a_{i_1, i_2, \dots, i_d} x_1^{i_1} \dots x_d^{i_d}. $$
定义傅里叶变换将$a$变换成$b = \mathcal{F}(a)$为
$$ b_{k_1, k_2, \dots, k_d} = \sum_{j_1 = 0}^{n_1-1} \dots \sum_{j_d = 0}^{n_d-1} \omega_1^{j_1k_1} \dots \omega_d^{j_dk_d} a_{j_1,j_2,\dots,j_d}. $$
其逆变换为
$$ a_{j_1,j_2,\dots,j_d} = n_1^{-1} n_2^{-1} \dots n_d^{-1} \sum_{k_1 = 0}^{n_1-1} \dots \sum_{k_d = 0}^{n_d-1} \omega_1^{-j_1k_1} \dots \omega_d^{-j_dk_d} b_{k_1, k_2, \dots, k_d}. $$
性质:
$$ \mathcal{F}(a) \cdot \mathcal{F}(b) = \mathcal{F}(a \odot b), $$
其中$(x \cdot y)(k) = x(k) \cdot y(k)$。进而
$$ \mathcal{F}^{-1}((\mathcal{F}(a))^m) = a^{\odot m}, $$
其中$x^m = x^{m-1} \cdot x$且$x^1 = x$。
在本题中,$n_1 = n_2 = \dots = n_d = B$。
环$R$的选取:
一般取复数域$R = \mathbb{C}$,则$\omega = \exp \left( \frac {2i \pi} n \right)$。但此题要求模$2^{58}$,浮点数精度不足以支撑(一般只能支持$a_j \sim 10^5$的情况)。为此,我们需要另外的环。我们引入分圆多项式(Cyclotomic polynomial),$n$阶分圆多项式定义为
$$ \Phi_n(x) = \prod_{1 \leq k \leq n, \gcd(k, n) = 1} \left( x - \exp\left(\frac{2i \pi k}{n}\right) \right). $$
特别地,
$$ \Phi_{10}(x) = x^4-x^3+x^2-x+1. $$
定理:
$$ \mathbb{Z}[x]/(\Phi_n(x)) \simeq \mathbb{Z}[\omega_n], $$
其中$\omega_n = \exp \left( \frac {2i\pi} {n} \right)$。注意到,$x$是$\mathbb{Z}[x]/(\Phi_n(x))$的主$n$次单位根。
为将答案模$2^{58}$,我们取$R = \mathbb{Z}_{2^{64}}[x]/\Phi_{10}(x)$,但此环中$N = 10^5$的逆,即$N^{-1}$,不存在,故只能有
$$ \mathcal{F}^*\left(\left(\mathcal{F}(a)\right)^{m}\right) \equiv N a^{\odot m} \pmod {2^{64}}. $$
于是,最后剩下一个数论问题:已知$y = 10^5 x \bmod 2^{64}$,其中$x \in \mathbb{Z}$,求$x \bmod 2^{58}$。
注意到必有$2^5 | y$,令$z = \frac y {2^5}$,则$z \equiv 5^5 x \pmod {2^{58}}$。
又$\gcd(5^5, 2^{58}) = 1$,故$(5^5)^{-1} \equiv (5^5)^{\phi(2^{58})-1} \pmod {2^{58}}$,其中$\phi(\cdot)$是欧拉函数(Euler's totient function)。
进而,$x \equiv (5^5)^{-1} z \pmod {2^{58}}$。
时间复杂度:
$O(D^2 B N \log_B N+D^2 N \log n)$,其中$D = \operatorname{deg} \Phi_B(x) = 4$。
解2:
可取$\mathbb{Z}[x]/(\Phi_5(x))$,其中$\Phi_5(x) = x^4+x^3+x^2+x+1$,且$-x$是主$10$次单位根。
在计算$\omega^{jk} a_j$时,朴素多项式乘法需要$O(D^2)$复杂度。为了降低复杂度,我们取$R = \mathbb{Z}[x]/(x^5-1)$,而$\mathbb{Z}[x]/(\Phi_5(x))$作为其子环。
这时,在$\mathbb{Z}[x]/(x^5-1)$中计算$\omega^{jk} a_j$,可在$O(D)$的复杂度内完成。
从而总时间复杂度为$O(D B N \log_B N + D^2 N \log n)$,其中$D = \operatorname{deg} (x^5-1) = 5$。
CodeForces 1103E. Radix sum的更多相关文章
- Codeforces 396B On Sum of Fractions 数论
题目链接:Codeforces 396B On Sum of Fractions 题解来自:http://blog.csdn.net/keshuai19940722/article/details/2 ...
- codeforces 963A Alternating Sum
codeforces 963A Alternating Sum 题解 计算前 \(k\) 项的和,每 \(k\) 项的和是一个长度为 \((n+1)/k\) ,公比为 \((a^{-1}b)^k\) ...
- codeforces 1217E E. Sum Queries? (线段树
codeforces 1217E E. Sum Queries? (线段树 传送门:https://codeforces.com/contest/1217/problem/E 题意: n个数,m次询问 ...
- Codeforces 1103 E. Radix sum
题目链接 神题. 题意:给定一个长度为\(10^5\)的幂级数\(a\),将卷积的下标运算定义为十进制下的不进位加法,求\(a^k\)模\(2^{58}\)的结果.\(k\leq 10^9\). 题解 ...
- Codeforces 577B Modulo Sum
http://codeforces.com/problemset/problem/577/B 题意:有n个数,求有无一个子序列满足和是m的倍数 思路:用模下的背包做,发现n是十的六次方级别,但是有个神 ...
- Codeforces 85 D. Sum of Medians
题目链接:http://codeforces.com/contest/85/problem/D 做法果然男默女泪啊..... 大概就是直接开了一个$vector$每次插入删除都用自带的$insert$ ...
- Codeforces 797B - Odd sum
B. Odd sum 题目链接:http://codeforces.com/problemset/problem/797/B time limit per test 1 second memory l ...
- Codeforces 963A Alternating Sum(等比数列求和+逆元+快速幂)
题目链接:http://codeforces.com/problemset/problem/963/A 题目大意:就是给了你n,a,b和一段长度为k的只有'+'和‘-’字符串,保证n+1被k整除,让你 ...
- Educational Codeforces Round 37-F.SUM and REPLACE题解
一.题目 二.题目链接 http://codeforces.com/contest/920/problem/F 三.题意 给定$N$个范围在$[1, 1e6)$的数字和$M$个操作.操作有两种类型: ...
随机推荐
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 显示和隐藏Mac隐藏文件的命令
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults writ ...
- kubernetes之计算机资源管理
系列目录 当你编排一个pod的时候,你也可以可选地指定每个容器需要多少CPU和多少内存(RAM).当容器请求特定的资源时,调度器可以更好地根据资源请求来确定把pod调度到哪个节点上.当容器请求限制特定 ...
- iOS移动开发周报-第16期
iOS移动开发周报-第16期 [摘要]:本期iOS移动开发周报带来如下内容:iOS 8的新特性,敏感逻辑的保护方案,iOS绘图教程,WKWebView的使用等. 教程 <iOS 8>: ...
- React_Redux_Router
一.react_redux 比较好的blog: blog1, blog2, blog3 主要根据前两个blog总结如下: 1. React在组件内部(包括子组件)为单向数据流且自上向下通过props传 ...
- MongoDB 征途
到目前为止,对数据库这块仍然捉襟见肘,仅限于懂一些MySQL,就更谈不上什么优化了. 细想来,还是没有项目驱动造成的...既然跟关系型数据库缘分未到,干脆直接go to NoSQL - MongoDB ...
- JMeter中使用Put请求方式请求接口
前言 现在有如下接口,是以PUT的方式请求的: 请求URL:IP+Port+/api/v1/apps/{appId} 请求参数: 参数名 必选 类型 nameCn 是 string nameEn 是 ...
- 九度OJ 1112:拦截导弹 (DP、最长下降子序列)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3124 解决:1525 题目描述: 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能 ...
- Message-oriented middleware
en.wikipedia.org/wiki/Message-oriented_middleware Message-oriented middleware (MOM) is software or h ...
- LeetCode(83)Remove Duplicates from Sorted List
题目 Given a sorted linked list, delete all duplicates such that each element appear only once. For ex ...