华东交通大学 2019 I 不要666 数位dp进阶
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进阶的更多相关文章
- 数位dp进阶(hdu2089,3652)
之前的文章已经讲过如何求1—r中的特殊数,这篇博客就来讲些进阶操作: 直接看例题(hdu2089): (题目是中文的我就不写大意了) 这题与hdu3555最大的区别就是规定了l,不再以1开始: 解决这 ...
- [Luogu P4124] [CQOI2016]手机号码 (数位DP)
题面 传送门:洛咕 Solution 感谢神仙@lizbaka的教学 这题是数位DP的非常非常模板的题目,只是状态有点多 . 这题我使用记忆化搜索实现的 中国有句古话说的好,有多少个要求就设多少个状态 ...
- 数位DP学习笔记
数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_ ...
- 2019华东交通大学ACM基地简介
一.基地成就简介: ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Contest(简称ACM-ICPC或ICPC))是由国际 ...
- 【2019.7.20 NOIP模拟赛 T2】B(B)(数位DP)
数位\(DP\) 首先考虑二进制数\(G(i)\)的一些性质: \(G(i)\)不可能有连续两位第\(x\)位和第\(x+1\)位都是\(1\).因为这样就可以进位到第\(x+2\)位.其余情况下,这 ...
- 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< ...
- 2019牛客暑期多校训练营(第七场)-H Pair(数位dp)
题目链接:https://ac.nowcoder.com/acm/contest/887/H 题意:给定A,B,C,求有多少对(x,y)满足x&y>C或者x^y<C,其中1< ...
- 2019年9月训练(壹)数位DP (HDU 2089)
开学之后完全没时间写博客.... HDU 2089 不要62(vjudge) 数位DP 思路: 题目给出区间[n,m] ,找出不含4或62的数的个数 用一个简单的差分:先求0~m+1的个数,再减去0~ ...
- 2019长安大学ACM校赛网络同步赛 L XOR (规律,数位DP)
链接:https://ac.nowcoder.com/acm/contest/897/L 来源:牛客网 XOR 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
随机推荐
- python标准库之glob介绍
python标准库之glob介绍 glob 文件名模式匹配,不用遍历整个目录判断每个文件是不是符合. 1.通配符 星号(*)匹配零个或多个字符 import glob for name in glob ...
- tensorflow-简单的神经网络
本次笔记是关于tensorflow1的代码,由于接触不久没有跟上2.0版本,这个代码是通过简单的神经网络做一个非线性回归任务,(如果用GPU版本的话第一次出错就重启) import tensorflo ...
- U盘改造计划之PE、kali、U盘三合一
最强U盘攻略之一 前一段时间朋友买电脑问了我一些问题,我突然发现U盘怎么这么便宜,128G金士顿,140?!!!我16年买的可是240啊.买贵一百块,我好方啊.但是我的U盘,我是不会屈服做一个普通的U ...
- change事件传值方式 data-set 以及复杂数据类型 可以动态创建对象push到数组里面
<template> <div> <!-- <div class="banner"> <a-breadcru ...
- iview 表格随着更改刷新
使用location.reload() 或者是 路由的 this.$router.go(0) 进行刷新的时候,是会出现一阵的空白区域的,因为是整个页面的刷新 ,所以比较缓慢,因此使用了provide/ ...
- [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
题目大意:给定$n$个正整数,求$[l,r]$中第$k$小的”好数“.$l,r\leqslant10^{18},n\leqslant62$,出现的其他数均$\leqslant10^{50}$ 好数定义 ...
- 支付宝支付回调方法RSA2验签失败处理方法
支付宝支付签名方式RSA2生成支付时使用的是支付宝公钥和应用私钥, 而不是应用公钥,支付宝公钥的生成是根据上传应用公钥而变动的, 所以在做回调的时候参数ALIPAY_PUBLIC_KEY也需要传支付宝 ...
- 转 让NET C# 程序独立运行(脱离 .NET Framework运行,绿色运行) 未验证
但是.net版本众多.而且.NET Framework框架很大.拖着一个大大的.net Framework总是让人很郁闷. 在网上找呀找呀.找到另一个.NET Framework 替代方案.Mono. ...
- Java调用WebService方法总结(8)--soap.jar调用WebService
Apache的soap.jar是一种历史很久远的WebService技术,大概是2001年左右的技术,所需soap.jar可以在http://archive.apache.org/dist/ws/so ...
- centos安装docker以及docker-compose
1.yum更新 # sudo yum update 2.如果安装docker旧版本,旧版本的卸载 # sudo yum remove docker docker-common docker-selin ...