描述


输入


输入数据仅一行包含三个整数,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. PostgreSQL - 官方手册、中文手册及Github项目地址

    PostgreSQL每次更新都会有语法变化,低版本的PostgreSQL是无法运行高版本的sql语法的,下边是官方手册地址,可以查看多个版本的: https://www.postgresql.org/ ...

  2. Android课程设计第六天欢迎界面(跳转)

    注意:课程设计只为完成任务,不做细节描述~ package com.example.myapplication; import android.app.Activity; import android ...

  3. Android课程设计第四天ListView运用

    注意:课程设计只为完成任务,不做细节描述~ 效果图 <?xml version="1.0" encoding="utf-8"?> <Relat ...

  4. 排序二叉树 HDOJ 5444 Elven Postman

    题目传送门 题意:给出线性排列的树,第一个数字是根节点,后面的数如果当前点小或相等往左走,否则往右走,查询一些点走的路径 分析:题意略晦涩,其实就是排序二叉树!1<<1000 普通数组开不 ...

  5. yii2 checkbox 的使用实例

    使用的是Yii自带的Grid,在使用checkbox希望可以把选中行的id值传到我想要的页面. 首先需要改变key值 $dataProvider->key = 'ID'; button: Htm ...

  6. Aria's Loops

    https://www.hackerrank.com/contests/101hack41/challenges/arias-loops 可以看我以前的笔记,http://www.cnblogs.co ...

  7. qconbeijing2014

    http://2014.qconbeijing.com/videoslides.html   周一 周二 周三 周四 周五 周六 2014年5月19日 Deep Dive into Amazon's ...

  8. 用户控件引用Entity Framework

    背景: 今天在做软件的时候,出现了问题,我在项目里面添加了Entity Framework,在form的代码里引用没有问题,在userControl里引用就出了问题. 我检查app.config文件 ...

  9. iOS之tableView性能优化/tableView滑动卡顿?

    本文围绕以下几点展开tableView性能优化的论述? 1.UITableViewCell重用机制? 2.tableView滑动为什么会卡顿? 3.优化方法? 4.总结 1.UITableViewCe ...

  10. hihocoder1718 最长一次上升子序列

    思路: 对于每个i,分别求1~i和i+1~N两部分的最长下降子序列“拼”起来,最终取最大长度即可.学习了如何使用BIT把LIS问题O(N2)算法优化为O(Nlog(N))的算法. https://ww ...