描述


输入


输入数据仅一行包含三个整数,l, r, k(0 ≤ l ≤ r ≤ 1018, |k| ≤ 100)。

输出


输出一行一个整数表示结果,考虑到答案可能很大,输出结果模 109 + 7。

提示


对于样例 ,满足条件的数有 110 和 121,所以结果是 231 = 110 + 121。

更多样例


Input

4344 3214567 3

Output

611668829

Input

404491953 1587197241 1

Output

323937411

Input

60296763086567224 193422344885593844 10

Output

608746132

Input

100 121 -1

Output

120

样例输入


100 121 0


样例输出

231

题解


设\(dp[i][j][k]\)为处理到第i位,当前数的位数为j,交错和为k。

import java.io.*;
import java.util.*; public class Main {
static class pair {
long x, y; pair(long tx, long ty) {
super();
x = tx;
y = ty;
} pair() {
x =y = 0;
}
} static final int mod = 1000000007;
static pair dp[][][] = new pair[25][25][405];
static long l, r, ten[] = new long[20];
static int bit[] = new int[20], k; static pair dfs(int pos, int s, boolean zero, boolean flag, int sum) {
if (pos < 0)
return new pair(sum == k ? 1 : 0, 0);
if (!zero && !flag &&dp[pos][s][sum+200].x != -1)
return dp[pos][s][sum+200];
int end = (flag ? bit[pos] : 9);
pair ans= new pair(),tmp=new pair();
for (int i = 0; i <= end; i++) {
if (zero) {
if (i == 0)
tmp = dfs(pos - 1, 0, true, flag && (i == end), 0);
else
tmp = dfs(pos - 1, 1, false, flag && (i == end), i);
} else {
tmp = dfs(pos - 1, s + 1, false, flag && (i == end), sum + ((s & 1) == 1 ? -i : i));
}
ans.x = (ans.x + tmp.x) % mod;
ans.y = (ans.y + tmp.y + tmp.x * i * ten[pos] % mod) % mod;
}
if (!flag && !zero)
dp[pos][s][sum+200] = ans;
return ans;
} static long solve(long n) {
if (n <= 0)
return 0;
int len = 0;
while (n > 0) {
bit[len++] = (int)(n % 10);
n /= 10;
}
return dfs(len - 1, 0, true, true, 0).y;
} public static void main(String[] args) {
ten[0] = 1;
for (int i = 1; i <= 18; i++)
ten[i] = ten[i - 1] * 10 % mod;
Scanner sc = new Scanner(new InputStreamReader(System.in));
while (sc.hasNext()) {
for (int i = 0; i < 25; i++)
for (int j = 0; j < 25; j++)
for (int h = 0; h < 405; h++)
dp[i][j][h] = new pair(-1, 0);
long l = sc.nextLong(), r = sc.nextLong();
k = sc.nextInt();
System.out.println((solve(r)-solve(l-1)+mod)%mod);
}
sc.close();
}
}

【HIHOCODER 1033 】 交错和(数位DP)的更多相关文章

  1. [hihocoder 1033]交错和 数位dp/记忆化搜索

    #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1 ...

  2. hihoCoder 1033 : 交错和 数位dp

    思路:数位dp,dp(i, j, k)表示考虑i位数,每位数可以任意取[0~9],并且这i位数的交错和为j,k=1表示前缀全是0(如000456),k=0表示前缀不为0.注意,前缀是否为0是这道题的一 ...

  3. HihoCoder 1033交错和(数位DP第三题)

    (写挂了,有空再补) 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1,定义 ...

  4. hihoCoder1033 交错和 数位DP

    题目:交错和 链接:http://hihocoder.com/problemset/problem/1033# 题意:对于一个十进制整数x,令a0.a1.a2.....an是x从高位到低位的数位,定义 ...

  5. hihoCoder 1033: 交错和

    (1)题目描述: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1,定义交错 ...

  6. hihoCoder #1033 : 交错和 (数位Dp)

    题目大意: 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1,定义交错和函数: f(x) = a0 - a1 + a2 - ... + ( - 1)n - ...

  7. 【hihoCoder】1033: 交错和

    初探数位dp 介绍了数位类统计的基础知识.以下列出其中的基础点: 基本问题 统计在区间[l, r]中满足条件的数的个数 思路 1. [l, r] 将问题转换为 在[0, r]中满足条件的个数 - 在[ ...

  8. hihocoder #1301 : 筑地市场 数位dp+二分

    题目链接: http://hihocoder.com/problemset/problem/1301?sid=804672 题解: 二分答案,每次判断用数位dp做. #include<iostr ...

  9. hihoCoder #1770 : 单调数(数位dp)

    题面 我们定义一个数是单调数,当且仅当构成这个数每一个数位都是单调不降或不增的. 例如 \(123\) 和 \(321\) 和 \(221\) 和 \(111\) 是单调的,而 \(312\) 不是单 ...

  10. hihocoder #1301 : 筑地市场 二分+数位dp

    #1301 : 筑地市场 题目连接: http://hihocoder.com/problemset/problem/1301 Description 筑地市场是位于日本东京都中央区筑地的公营批发市场 ...

随机推荐

  1. const 和 constexpr

    在C++中,const 这个关键字用法非常灵活,导致我总会搞不清作用是干啥的.灵活使用const会大大改善程序. const 是C++的一种类型修饰符,是不可改变的不能被更新的. 1.const 修饰 ...

  2. Centos6.8 搭建 Mysql 主从复制

    实例环境: MySQL-Master:Centos-6.8:192.168.153.130 MySQL-Slave:Centos-6.8:192.168.153.131 1.两台服务器安装mysql ...

  3. spring cloud feign 调用接口报错"No message available

    There was an unexpected error (type=Internal Server Error, status=500). status 404 reading HelloServ ...

  4. 跟我一起玩Win32开发(12):使用控件——单选按钮

    今天,咱们还是接着玩“控件斗地主”,这是我原创的超级游戏,有益身心健康,玩一朝,十年少. 哦,对,脑细胞极速运动了一下,想起了一个问题,这个破问题虽然网上有很多种解决方案,但是,并没有让所有人都解决问 ...

  5. Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count

    Bryce1010模板 http://codeforces.com/problemset/problem/1000/C 题意:问你从[l,r]区间的被多少条线覆盖,列出所有答案. 思路:类似括号匹配的 ...

  6. Vue-cli构建项目, 组件中js代码引入图片路径问题

    问题描述 .vue的组件分成三个部分, template结构部分, script路径代码, style页面样式 首先, 我们可以在template可以正确引入, 无论是dev, 还是build都没有问 ...

  7. STM32CUBEMX使用注意:

    一 注意堆栈大小,简单来说,栈空间用于局部变量空间(size=0x400一般够用),堆(size=0x200一般够用)空间用于 alloc 或者 malloc函数动态申请变量空间

  8. G. 24 观察 + 树状数组

    http://codeforces.com/gym/101257/problem/G 首先要看到题目,题目是本来严格大于score[i] > score[j].然后score[i] < s ...

  9. (办公)定时任务quartz入门

    1.简单入门. 2.定时任务注入service. 入门案例: 1.1. 加jar <dependency> <groupId>org.quartz-scheduler</ ...

  10. PHP设计模式 原型模式(Prototype)

    定义 和工厂模式类似,用来创建对象.但实现机制不同,原型模式是先创建一个对象,采用clone的方式进行新对象的创建. 场景 大对象的创建. 优点 1.可以在运行时刻增加和删除产品 2.可以改变值或结构 ...