题目简述:对任意两个(正)十进制数$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}$。

解:

code

建模:

设$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:

code2

可取$\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的更多相关文章

  1. Codeforces 396B On Sum of Fractions 数论

    题目链接:Codeforces 396B On Sum of Fractions 题解来自:http://blog.csdn.net/keshuai19940722/article/details/2 ...

  2. codeforces 963A Alternating Sum

    codeforces 963A Alternating Sum 题解 计算前 \(k\) 项的和,每 \(k\) 项的和是一个长度为 \((n+1)/k\) ,公比为 \((a^{-1}b)^k\) ...

  3. codeforces 1217E E. Sum Queries? (线段树

    codeforces 1217E E. Sum Queries? (线段树 传送门:https://codeforces.com/contest/1217/problem/E 题意: n个数,m次询问 ...

  4. Codeforces 1103 E. Radix sum

    题目链接 神题. 题意:给定一个长度为\(10^5\)的幂级数\(a\),将卷积的下标运算定义为十进制下的不进位加法,求\(a^k\)模\(2^{58}\)的结果.\(k\leq 10^9\). 题解 ...

  5. Codeforces 577B Modulo Sum

    http://codeforces.com/problemset/problem/577/B 题意:有n个数,求有无一个子序列满足和是m的倍数 思路:用模下的背包做,发现n是十的六次方级别,但是有个神 ...

  6. Codeforces 85 D. Sum of Medians

    题目链接:http://codeforces.com/contest/85/problem/D 做法果然男默女泪啊..... 大概就是直接开了一个$vector$每次插入删除都用自带的$insert$ ...

  7. Codeforces 797B - Odd sum

    B. Odd sum 题目链接:http://codeforces.com/problemset/problem/797/B time limit per test 1 second memory l ...

  8. Codeforces 963A Alternating Sum(等比数列求和+逆元+快速幂)

    题目链接:http://codeforces.com/problemset/problem/963/A 题目大意:就是给了你n,a,b和一段长度为k的只有'+'和‘-’字符串,保证n+1被k整除,让你 ...

  9. Educational Codeforces Round 37-F.SUM and REPLACE题解

    一.题目 二.题目链接 http://codeforces.com/contest/920/problem/F 三.题意 给定$N$个范围在$[1, 1e6)$的数字和$M$个操作.操作有两种类型: ...

随机推荐

  1. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  2. 显示和隐藏Mac隐藏文件的命令

    显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults writ ...

  3. kubernetes之计算机资源管理

    系列目录 当你编排一个pod的时候,你也可以可选地指定每个容器需要多少CPU和多少内存(RAM).当容器请求特定的资源时,调度器可以更好地根据资源请求来确定把pod调度到哪个节点上.当容器请求限制特定 ...

  4. iOS移动开发周报-第16期

    iOS移动开发周报-第16期 [摘要]:本期iOS移动开发周报带来如下内容:i​OS 8的新特性,敏感逻辑的保护方案,iOS绘图教程,WKWebView的使用等. 教程 <i​OS 8>: ...

  5. React_Redux_Router

    一.react_redux 比较好的blog: blog1, blog2, blog3 主要根据前两个blog总结如下: 1. React在组件内部(包括子组件)为单向数据流且自上向下通过props传 ...

  6. MongoDB 征途

    到目前为止,对数据库这块仍然捉襟见肘,仅限于懂一些MySQL,就更谈不上什么优化了. 细想来,还是没有项目驱动造成的...既然跟关系型数据库缘分未到,干脆直接go to NoSQL - MongoDB ...

  7. JMeter中使用Put请求方式请求接口

    前言 现在有如下接口,是以PUT的方式请求的: 请求URL:IP+Port+/api/v1/apps/{appId} 请求参数: 参数名 必选 类型 nameCn 是 string nameEn 是 ...

  8. 九度OJ 1112:拦截导弹 (DP、最长下降子序列)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3124 解决:1525 题目描述: 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能 ...

  9. Message-oriented middleware

    en.wikipedia.org/wiki/Message-oriented_middleware Message-oriented middleware (MOM) is software or h ...

  10. LeetCode(83)Remove Duplicates from Sorted List

    题目 Given a sorted linked list, delete all duplicates such that each element appear only once. For ex ...