Problem Description

题库链接

666是一个网络用语,用来形容某人或某物很厉害很牛。而在西方,666指魔鬼,撒旦和灵魂,是不吉利的象征。所以邓志聪并不喜欢任何与6有关的数字。什么数字与6有关呢:

满足以下3个条件中的一个,我们就认为这个整数与6有关。

1.这个整数在10进制下某一位是6.

2.这个整数在10进制下的数位和是6的倍数.

3.这个数是6的整数倍。

那么问题来了:邓志聪想知道在一定区间内与6无关的数的和。

Input

本题为多组输入,请处理到文件结尾,每行包含两个正整数L,R。(1<=L<=R<=1e18)。

Output

输出一个正整数,该正整数为区间【L,R】中与6无关的数字的和。由于这个数字可能很大,请对1e9+7取模。

Sample Input

1 9

1 20

Sample Output

39

143

Analysis of ideas

数位dp进阶的难度吧,也不是很难,和kuangbin里面的一题类似(777),那题更变态,题目链接

第一次发现可以定义结构体类型的数位dp

cnt 满足题意的数 的 个数

sum 满足题意的数 的 和

Accepted code

#include <bits/stdc++.h>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
const int maxn = 100100;
const int inf = 0x3f3f3f3f;
const int M = 1e9+7;
int a[20];
struct node
{
ll cnt,sum;
}dp[20][10][10];//sw,sum,he ll p[20]; void init()
{
p[0] = 1;
for(int i = 1; i <= 18; i++)
{
p[i] = (p[i-1]*10)%M;
}
for(int i = 0; i < 20; i++)
{
for(int j = 0; j < 10; j++)
{
for(int k = 0; k < 10; k++)
{
dp[i][j][k].cnt = -1;
}
}
}
} node dfs(int sw,ll sum,ll h,bool limit) //个数,数,数位和,限制条件
{
if(sw == -1)
{
return node{sum!=0&&h!=0,0}; //个数,和
}
if(!limit && dp[sw][sum][h].cnt != -1) return dp[sw][sum][h];
int up = limit?a[sw]:9;
node ans,tmp;
ans.cnt = 0,ans.sum = 0;
for(int i = 0; i <= up; i++)
{
if(i == 6) continue; tmp = dfs(sw-1,(sum*10+i)%6,(h+i)%6,limit&&i==a[sw]); //sw-1,(sum*10+i)%6,(h+i)%6,limit //当前满足条件的数的个数 += 之前(前一位)满足条件的数的个数
ans.cnt = (ans.cnt+tmp.cnt)%M; //当前的数字和 += 之前(前一位)的数字和 + (当前符合条件的数的个数 * i * 10的当前位数次方);
ans.sum = (ans.sum + ( tmp.sum + ((p[sw]*i) %M)*(tmp.cnt %M)) %M) %M;
}
if(!limit) dp[sw][sum][h] = ans; //sw,sum和h就一定可以确定一个数吗???
return ans;
} ll solve(ll n)
{
int sw = 0;
while(n)
{
a[sw++] = n%10;
n /= 10;
}
return dfs(sw-1,0,0,true).sum;
} int main()
{
ll l,r;
init();
while(~scanf("%lld%lld",&l,&r))
{
ll ans = solve(r)+M-solve(l-1);
cout<<ans%M<<endl;
}
return 0;
}

参考博客

https://www.cnblogs.com/neopenx/p/4008921.html

华东交通大学 2019 I 不要666 数位dp进阶的更多相关文章

  1. 数位dp进阶(hdu2089,3652)

    之前的文章已经讲过如何求1—r中的特殊数,这篇博客就来讲些进阶操作: 直接看例题(hdu2089): (题目是中文的我就不写大意了) 这题与hdu3555最大的区别就是规定了l,不再以1开始: 解决这 ...

  2. [Luogu P4124] [CQOI2016]手机号码 (数位DP)

    题面 传送门:洛咕 Solution 感谢神仙@lizbaka的教学 这题是数位DP的非常非常模板的题目,只是状态有点多 . 这题我使用记忆化搜索实现的 中国有句古话说的好,有多少个要求就设多少个状态 ...

  3. 数位DP学习笔记

    数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_ ...

  4. 2019华东交通大学ACM基地简介

    一.基地成就简介: ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Contest(简称ACM-ICPC或ICPC))是由国际 ...

  5. 【2019.7.20 NOIP模拟赛 T2】B(B)(数位DP)

    数位\(DP\) 首先考虑二进制数\(G(i)\)的一些性质: \(G(i)\)不可能有连续两位第\(x\)位和第\(x+1\)位都是\(1\).因为这样就可以进位到第\(x+2\)位.其余情况下,这 ...

  6. Pair(二进制处理+数位dp)(2019牛客暑期多校训练营(第七场))

    示例: 输入: 33 4 24 5 27 8 5 输出:5 7 31 题意:存在多少对<x,y>满足x&y>C或x^y<C的条件.(0<x<=A,0< ...

  7. 2019牛客暑期多校训练营(第七场)-H Pair(数位dp)

    题目链接:https://ac.nowcoder.com/acm/contest/887/H 题意:给定A,B,C,求有多少对(x,y)满足x&y>C或者x^y<C,其中1< ...

  8. 2019年9月训练(壹)数位DP (HDU 2089)

    开学之后完全没时间写博客.... HDU 2089 不要62(vjudge) 数位DP 思路: 题目给出区间[n,m] ,找出不含4或62的数的个数 用一个简单的差分:先求0~m+1的个数,再减去0~ ...

  9. 2019长安大学ACM校赛网络同步赛 L XOR (规律,数位DP)

    链接:https://ac.nowcoder.com/acm/contest/897/L 来源:牛客网 XOR 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

随机推荐

  1. 【Tools】VMware虚拟机三种网络模式详解和操作

    目录 00. 目录 01. VMware虚拟机三种网络模式 02. Bridged(桥接模式) 03. NAT(地址转换模式) 04. Host-Only(仅主机模式) 00. 目录 @ 参考:htt ...

  2. canal+kafka订阅Mysql binlog将数据异构到elasticsearch(或其他存储方式)

    canal本质就是"冒充"从库,通过订阅mysql bin-log来获取数据库的更改信息. mysql配置(my.cnf) mysql需要配置my.cnf开启bin-log日志并且 ...

  3. jvm问题排查工具、命令

    dump生成:jmp -dump:live,format=b,file=/tmp/some.bin PID.其中,加上live表示只dump存活的对象. 线程栈信息生成:jstack PID > ...

  4. CCF 2016-04-2 俄罗斯方块

    CCF 2016-04-2 俄罗斯方块 题目 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏. 游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者 ...

  5. 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)

    原文:如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) 我们都知道可以通过在 Visual Studio 中设置输出路径(OutputPath)来更改项目输 ...

  6. ZIP压缩与解压

    /**//* * Gary Zhang -- cbcye@live.com * www.cbcye.com * www.quicklearn.cn * cbcye.cnblogs.com */ usi ...

  7. 易百教程人工智能python修正-人工智能数据准备-标记数据

    我们已经知道,某种格式的数据对于机器学习算法是必需的. 另一个重要的要求是,在将数据作为机器学习算法的输入发送之前,必须正确标记数据. 例如,如果所说的分类,那么数据上会有很多标记. 这些标记以文字, ...

  8. php-sql-server-2017

    Download the Microsoft Drivers for PHP for SQL Server https://docs.microsoft.com/en-us/sql/connect/p ...

  9. iOS - 适配iOS 11

    http://www.10tiao.com/html/330/201707/2653579210/1.html 存档 导语:iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. ...

  10. 7.nth-of-type | nth-child?【CSS】

    举例说明:  <ul> <p>111</p> <span>222</span> <li>1</li> <li& ...