title: 牛客练习赛34 E little w and Digital Root(数位dp)
date: 2018-12-17 22:38:37
tags: 数位dp
categories:ACM

题目链接

题目描述

数根(又称数字根Digital root)是正整数的一种性质,换句话说,每个正整数都有一个数根。 数根是将一正整数的各个位数相加(即横向相加),若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于十为止,或是,将一数字重复做数字和,直到其值小于十为止,则所得的值为该数的数根。

比如:12345->15->6。

小w现在定义一种叫做小w数根运算,这种运算的规则如下: 首先对十进制数的每个数位定义了一个权值,个位为1,十位为2,百位为3,千位为4,万为为5…以此类推 接下来把这个数的各个位数乘以该数位的权值再相加求和,若加完后的值大于等于10的话,则重复此过程,直到整个数字小于10为止,所得的值为小w数根。 现在小w想知道给定一个值域L,R,请你告诉他,值域范围内有多少个数字的小w数根等于1,2,3,4,5,6,7,8,9。

输入描述:

第一行输入一个正整数T(T<=10^4),表示样例的组数。对于每组案例: 输入两个正整数L,R(1<=L<=R<=1000000000000000000)

输出描述:

对于每组案例,请先输出Case #x:,x表示当前样例编号。
然后在同一行输出9个整数,分别表示值域内小w数根等于1,2,3,4,5,6,7,8,9的数各有多少个。 整数之间用空格隔开,行末不允许有多余空格。

输入

10
1 10
2 55
36 78
15 15
3 59
56 77
89 93
90 90
55 99
1 99

输出

Case #1: 1 2 1 1 1 1 1 1 1
Case #2: 0 7 7 7 7 7 7 6 6
Case #3: 0 5 5 6 6 6 5 5 5
Case #4: 0 0 0 0 0 0 1 0 0
Case #5: 0 7 8 7 7 7 7 7 7
Case #6: 0 3 3 3 3 2 2 3 3
Case #7: 0 1 1 1 1 0 0 0 1
Case #8: 0 1 0 0 0 0 0 0 0
Case #9: 0 6 6 5 5 5 6 6 6
Case #10: 1 13 13 12 12 12 12 12 12

思路

  • 最大的数根:999999999999999999 -> 1539,小于1600。
  • 可以用数位dp模拟,dp[i][j][k], i < 1600 表示数根,j < 20 表示位数,k < 10表示(1-9)的数根
    #include <bits/stdc++.h>#define LL  long long#define P pair<int, int>#define lowbit(x) (x & -x)#define mem(a, b) memset(a, b, sizeof(a))#define REP(i, n) for (int i = 1; i <= (n); ++i)#define rep(i, n) for (int i = 0; i < (n); ++i)#define N 206using namespace std;int num[20];LL dp[1600][20][10];int judge(int sta, int tar) {int sum = 0;int pos = 1;while (sta) {sum += pos * (sta % 10);sta /= 10;++pos;}if (sum < 10)   return sum == tar;else    return judge(sum, tar);}LL dfs(int sta, int pos, int tar, int limit) {if (pos == 0)   return judge(sta, tar);if (!limit && dp[sta][pos][tar] != -1)    return dp[sta][pos][tar];LL sum = 0;int up = limit ? num[pos] : 9;rep(i, up + 1) {sum += dfs(sta+pos*i, pos-1, tar, limit&&(i == up));}if (!limit) dp[sta][pos][tar] = sum;return sum;}LL solve(LL x, int tar) {int len = 0;while (x) {num[++len] = x % 10;x /= 10;}return dfs(0, len, tar, 1);}int main() {#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endifint T, kase = 1;scanf("%d", &T);mem(dp, -1);while (T--) {printf("Case #%d:", kase++);LL l, r;scanf("%lld%lld", &l, &r);REP(i, 9) {printf(" %lld", solve(r, i) - solve(l-1, i));}puts("");}return 0;}

牛客练习赛34 E little w and Digital Root(数位dp)相关推荐

  1. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  2. little w and Soda 牛客练习赛34

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 四级考完了,偷偷更一篇 qwq 题解:简单推理题,自己在本子上画一画,规律就是如果钱n是偶数,就 ...

  3. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  4. 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)

    牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作,最后得到的答案会是最大的,那我们可以将它放进一个最小堆中来维护,但是里面的数是需要取模的,当它取模的时候,将会变小.那 ...

  5. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  6. 牛客练习赛#105(A-D)

    牛客练习赛#105 文章目录 牛客练习赛#105 A.切蛋糕的贝贝 B.抱歉,这没有集美 C.打牌的贝贝 D.点分治分点 A.切蛋糕的贝贝 题意 有一个正n边形,想通过下列的切法切成面积比为1:1:4 ...

  7. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  8. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

最新文章

  1. golang sdk后端怎么用_Golang资深后端工程师需要了解的知识点
  2. 如何打一个FatJar(uber-jar)
  3. 应届生,你凭什么认为你当得了产品经理?| PMCAFF
  4. 100个人搬100块砖C语言,姓氏名人故事:一百块砖搬出搬进
  5. C++很难学?这个ACM金牌大佬可不这么认为!
  6. 银行支行信息 银行卡归属地
  7. Java:实现文件批量导入导出实践(兼容xls,xlsx)
  8. Nagios搭建及问题详解(一)
  9. Linux下gdb调试(GUI)
  10. python爬虫app_Python爬虫:抓取手机APP的数据
  11. Tomcat 的安装与配置
  12. 拍沪牌服务器响应,拍中了四张沪牌,再来聊聊拍牌经验
  13. 软件测试文档模板 ppt,软件测试技术.ppt.pdf
  14. INFO:ProjectMgmt - The selected process was not run because a prior process failed.的解决方案
  15. swift 设置启动页
  16. h5移动端使用手机自带软键盘的“前往”、“go”键提交表单
  17. 桌面cpu与服务器cpu天梯,台式CPU性能怎么看?桌面CPU天梯图2018年1月更新版
  18. 解决three.js渲染gltf 模型与gltfViewer网站效果不一致问题 krpano发黑问题 three.js gltf模型渲染发黑问题
  19. App Designer中自建回调函数
  20. python解魔方程序_写一个解二阶魔方的程序

热门文章

  1. Poj2480欧拉函数
  2. oc基础-foundation框架中的常用结构体
  3. PHP LOG使用心得(2)
  4. MVC架构在Asp.net中的应用和实现
  5. Day11多态部分-4
  6. HarmonyOS之深入解析蓝牙Bluetooth的功能和使用
  7. iOS经典面试题之深入解析类Class的iskindOfClass与isMemberOfClass的底层原理
  8. 2015年第六届蓝桥杯 - 省赛 - Java大学B组 - A. 三角形面积
  9. LeetCode Algorithm 剑指 Offer 57 - II. 和为s的连续正数序列
  10. 2 0 2 0 年 第 十 一 届 蓝 桥 杯 - 国赛 - CC++大学B组 - A.美丽的2