题目大意:定义$f(x)$表示$x$每一个数位(十进制)的数之和,求$\sum\limits_{i=l}^rf(i)$,多组询问。

题解:数位$DP$,可以求出每个数字的出现个数,再乘上每个数字的大小即可。

卡点:无(结构体记得写构造函数清空)

C++ Code:

#include <algorithm>
#include <cstdio>
#define maxn 20
const int mod = 1e9 + 7;
inline void reduce(int &x) { x += x >> 31 & mod; }
inline int getreduce(int x) { return x + (x >> 31 & mod); } int Tim;
struct node {
int s[10], cnt;
inline node() { __builtin_memset(s, 0, 10 << 2); cnt = 0; }
inline void operator += (const node &rhs) {
for (int i = 0; i < 10; ++i) reduce(s[i] += rhs.s[i] - mod);
reduce(cnt += rhs.cnt - mod);
}
inline int get() {
int res = 0;
for (int i = 1; i < 10; ++i) reduce(res += static_cast<long long> (s[i]) * i % mod - mod);
return res;
}
} F[maxn], I;
bool vis[maxn]; int num[maxn], tot;
node calc(int x, bool lim, bool lead) {
if (!x) return I;
if (!lim && lead && vis[x]) return F[x];
node f;
for (int i = lim ? num[x] : 9, op = 1; ~i; --i, op = 0) {
node val = calc(x - 1, lim && op, lead || i);
f += val;
if (i || lead) reduce(f.s[i] += val.cnt - mod);
}
if (!lim && lead) F[x] = f, vis[x] = true;
return f;
}
int solve(long long x) {
if (x < 0) return 0;
tot = 0;
while (x) {
num[++tot] = x % 10;
x /= 10;
}
return calc(tot, true, false).get();
} int main() {
scanf("%d", &Tim);
I.cnt = 1;
while (Tim --> 0) {
long long l, r;
scanf("%lld%lld", &l, &r);
printf("%d\n", getreduce(solve(r) - solve(l - 1)));
}
return 0;
}

  

[洛谷P4999]烦人的数学作业的更多相关文章

  1. P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业

    P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...

  2. luoguP4999 烦人的数学作业

    写在前面 这两天信息量有点大,需要好好消化一下,呼呼 \(f[i][j]\) 的转移式还是好理解的,但是对于其实际意义课上有点糊 求 \(ans_{1, x}\) 是感觉手动把数拆开看会好理解一点?? ...

  3. 题解 P4999 【烦人的数学作业】

    数位 dp. 设 \(dp_{q,i}\)(\(i\in\{0,1,2,3,4,5,6,7,8,9\}\))为 \(1\sim q\) 中 \(i\) 出现的次数,\(1\sim q\) 的数字和显然 ...

  4. 洛谷 P4999

    题目链接: P4999 烦人的数学作业 题目大意 详见题目 solution 有一个显而易见的结论 发现 \(ans_{l, r} = ans_{1. r} - ans_{1, l - 1}\) 那只 ...

  5. 洛谷 P4999(数位DP)

    ###洛谷 P4999 题目链接 ### 题目大意:给你一个区间,求这段区间中所有数的,数位上的,数字之和. 分析: 这题与 洛谷 P2602 相似,稍微改一下就可以了. 求出 0 ~ 9 的个数,然 ...

  6. 洛谷 P1858 多人背包 DP

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 洛谷 P1858 多人背包 题目描述 求01背包前k优解的价值 ...

  7. [洛谷P1858] 多人背包

    洛谷题目链接:多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数K.V.N 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 输入输出样例 输入样例# ...

  8. 洛谷——P2083 找人

    P2083 找人 题目背景 无 题目描述 小明要到他的同学家玩,可他只知道他住在某一单元,却不知住在哪个房间.那个单元有N层(1,2……N),每层有M(1,2……M)个房间. 小明会从第一层的某个房间 ...

  9. 洛谷 P1858 多人背包 解题报告

    P1858 多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数\(K\).\(V\).\(N\) 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 说 ...

随机推荐

  1. P2351 [SDOi2012]吊灯

    P2351 [SDOi2012]吊灯 https://www.luogu.org/problemnew/show/P2351     题意: 一棵树,能否全部分成大小为x的联通块. 分析: 显然x是n ...

  2. CLR via c#读书笔记八:泛型

    1.定义泛型类型或方法时,为类型指定的任何变量(比如T)都称为类型参数.使用泛型类型或方法时指定的具体数据类型称为类型实参. 2.System.Collections.Concurrent命名空间提供 ...

  3. Python 获取windows管理员权限办法

    from __future__ import print_function import ctypes, sys, os def is_admin(): try: return ctypes.wind ...

  4. Tomcat - 远程调试配置

    复制一份startup.bat,更名为“startup-debug”. 替换内容如下: call "%EXECUTABLE%" start %CMD_LINE_ARGS% 替换为 ...

  5. Hive实现自增列

    1.用row_number()函数生成代理键 ) max_id from id_test) t2; 2.用UDFRowSequence生成代理键              ——报错? add jar ...

  6. 生鲜水果商城PC手机微信完整版源码2018版(免费)

    采用php+mysql架构,含有PC.手机.微信三端,只需要修改一下数据库配置,并恢复一下数据即可使用,还有微信.支付宝等接口,如有问题请在文章下面留言一下,我看到会协助一下的,下载包里面含有详细的安 ...

  7. Jmeter使用之:高效组织接口自动化用例技巧

    Jmeter怎么使用的文章多如牛毛,但怎么组织好测试用例,则几乎很难看到.在本文,我将把Jmeter下怎么组织测试用例的几点心得分享给大家,希望能给你一些帮助或启示. 1.善用“逻辑控制器”中的“简单 ...

  8. PyMySQL连接MySQL数据库

    首先, 添加PyMySQL模块: 代码: import pymysql db = pymysql.connect(host="localhost", user="root ...

  9. linux学习总结----mongoDB总结

    dbhelper.py 用户登录和注册(加密算法) 加密导包 import hashlib 或者使用Md5 加密 MongoDB ->JSON service mysql start servi ...

  10. CSP201609-1:最大波动

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...