您的位置:首页 > Web前端 > JavaScript

【JSOI 2013】密码

2015-08-28 09:45 507 查看

题目大意

对于一个mm位的十进制整数x=(a0a1a2...am−1)10x=(a_0a_1a_2...a_{m-1})_{10},定义

g(x)=∑m−1i=0aig(x)=\sum_{i=0}^{m-1}a_i

定义集合

Sn={x|0<g(x)≤n}S_n = \{ x|0

给出nn,求下面这个式子

∑x∈Sn∑y∈Sn,x<yxy\sum_{x\in S_n} \sum_{y\in Sn, x

n≤1018n\leq 10^{18}

分析

一开始看这题的时候不小心把g(x)g(x)里的∑\sum看成了∏\prod。囧

剩下的就是数位DP了。

记cntxcnt_x表示数位和为xx的数的个数,linearxlinear_x表示数位和为xx的所有数的总和,squarexsquare_x表示数位和为xx的数的平方和。

通过枚举当前位选什么,不难写出递推式

cnti=∑9j=1cnti−jcnt_i=\sum_{j=1}^9cnt_{i-j}

lineari=∑9j=110⋅lineari−j+j⋅cnti−jlinear_i=\sum_{j=1}^910\cdot linear_{i-j}+j\cdot cnt_{i-j}

squarei=∑9j=1100⋅squarei−j+20j⋅lineari−j+j2cnti−jsquare_i=\sum_{j=1}^9100\cdot square_{i-j}+20j\cdot linear_{i-j}+j^2cnt_{i-j}

发现三个状态的转移都只与最近99位有关,将它们压成矩阵,用矩阵快速幂转移即可。

时间复杂度O(logn)O(log_n),其中常数为29329^3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: