题目链接


题目大意:给你区间∈[l,r]\in[l,r]∈[l,r],问不满足
1.本身含有7;1.本身含有7;1.本身含有7;
2.每个数位和是7的倍数2.每个数位和是7的倍数2.每个数位和是7的倍数
3.这个数的本身就是7的倍数3.这个数的本身就是7的倍数3.这个数的本身就是7的倍数这些条件的数的平方和是多少?结果mod1e9+7mod1e9+7mod1e9+7


解题思路:
1.我们先将数字分解成n位,我们要解决一个问题就是如何记忆化搜索,就是我们对于一个n位数我们已经知道了前k位如何记忆化后面的部分1.我们先将数字分解成n位,我们要解决一个问题就是如何记忆化搜索,就是我们对于一个n位数我们已经知道了前k位如何记忆化后面的部分1.我们先将数字分解成n位,我们要解决一个问题就是如何记忆化搜索,就是我们对于一个n位数我们已经知道了前k位如何记忆化后面的部分


2.假设我们知道最高位是j,我们这个数就可以j∗10n−1+A(A是后面的数);2.假设我们知道最高位是j,我们这个数就可以j*10^{n-1}+A(A是后面的数);2.假设我们知道最高位是j,我们这个数就可以j∗10n−1+A(A是后面的数);


3.这个数的平方就是(j∗10n−1+A)2=j2∗102n−2+2∗j∗10n−1∗A+A2,假设后面又A1,A2,A3....At,有t个数满足条件,化简就是j2∗102n−2∗t+2∗j∗10n−1∗(A1+A2+....At)+((A1)2+(A2)2+....+(At)2)3.这个数的平方就是(j*10^{n-1}+A)^2=j^{2}*10^{2n-2}+2*j*10^{n-1}*A+A^2,假设后面又A_1,A_2,A_3....A_t,有t个数满足条件,化简就是j^{2}*10^{2n-2}*t+2*j*10^{n-1}*(A_1+A_2+....A_t)+((A_1)^2+(A_2)^2+....+(A_t)^2)3.这个数的平方就是(j∗10n−1+A)2=j2∗102n−2+2∗j∗10n−1∗A+A2,假设后面又A1​,A2​,A3​....At​,有t个数满足条件,化简就是j2∗102n−2∗t+2∗j∗10n−1∗(A1​+A2​+....At​)+((A1​)2+(A2​)2+....+(At​)2)


4.通过上面我们知道我们要维护3个数值就是:num[满足条件A的个数],cur[满足条件的A的和],sqr[满足条件的平方和],通过数位dp的dfs返回数据计算4.通过上面我们知道我们要维护3个数值就是:num[满足条件A的个数],cur[满足条件的A的和],sqr[满足条件的平方和],通过数位dp的dfs返回数据计算4.通过上面我们知道我们要维护3个数值就是:num[满足条件A的个数],cur[满足条件的A的和],sqr[满足条件的平方和],通过数位dp的dfs返回数据计算


5.上面已经计算了sqr,cnr=(j+A1)+(j+A2)+..+(j+At)=j∗t+(A1+..+At),num=t;这一层计算的cur和num是为了回溯给上一层计算的5.上面已经计算了sqr,cnr=(j+A_1)+(j+A_2)+..+(j+A_t)=j*t+(A_1+..+At),num=t;这一层计算的cur和num是为了回溯给上一层计算的5.上面已经计算了sqr,cnr=(j+A1​)+(j+A2​)+..+(j+At​)=j∗t+(A1​+..+At),num=t;这一层计算的cur和num是为了回溯给上一层计算的


#include <iostream>
#include <cstdio>
#include <stack>
#include <sstream>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <cmath>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <set>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define hash Hash
#define next Next
#define count Count
#define pb push_back
#define f first
#define s second
using namespace std;
const int N = 1e7+10,mod = 1e9 + 7;
const double eps = 1e-10;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
ll p10[20];
int num[20], k;
ll a, b;
struct node
{ll num, cur, sqr;
}f[20][10][10];//数字长度,数字本身 % 7,数位和 % 7node dfs(int len, int a, int b, int limit)
{if(!len)  return (node){a && b,0,0};if(!limit && ~f[len][a][b].num) return f[len][a][b];int up = limit ? num[len] : 9;node v = (node){0,0,0};node res = (node){0,0,0};_rep(i,0,up){if(i == 7) continue;ll top = i * p10[len - 1] % mod;res = dfs(len - 1, (i + a * 10) % 7,(b + i) % 7, limit && i == up);v.num = (v.num + res.num) % mod;v.cur = (1ll * top * res.num % mod + (res.cur + v.cur) % mod) % mod;v.sqr = ((1ll * (top * top) % mod * res.num % mod + res.sqr + 2ll * top * (res.cur % mod)) % mod  + v.sqr) % mod;}if(!limit) f[len][a][b] = v;return v;
}ll solve(ll n)
{k = 0; ms(f,-1);while(n){num[++ k] = n % 10;n /= 10;}ll res = dfs(k,0,0,1).sqr;return res;
}int main()
{int T;cin >> T;p10[0] = 1;_for(i,1,20) p10[i] = p10[i - 1] * 10 % mod;while(T --){scanf("%lld%lld",&a,&b);printf("%lld\n",(solve(b) - solve(a - 1) + mod) % mod);}return 0;
}

acwing1086||HDU4507数位dp[恨7不成妻]相关推荐

  1. HDU-4507 吉哥系列故事――恨7不成妻 (数位dp)

    J - 吉哥系列故事――恨7不成妻 HDU - 4507 题解:数位dp 和简单的数位dp不同,这道题要算所有合法数的平方和 考虑到一个数可以写成X=ΣAi*Pi,(其中Ai为X每一位的值,Pi=10 ...

  2. hdu4507吉哥系列故事——恨7不成妻 (数位dp)

    Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: ...

  3. 【数位DP】恨7不成妻

    [数位DP]恨7不成妻 时间限制: 1 Sec  内存限制: 128 MB 提交: 8  解决: 4 [提交] [状态] [命题人:admin] 题目描述 单身! 依然单身! 吉哥依然单身! DS级码 ...

  4. HDU 4507 吉哥系列故事――恨7不成妻 数位DP

    吉哥系列故事--恨7不成妻 Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  5. HDU - 4507 吉哥系列故事――恨7不成妻 (数位DP)

    Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 ...

  6. HDU 4507 吉哥系列故事――恨7不成妻 (平方拆解 + *数位DP 总结)

    单身!  依然单身!  吉哥依然单身!  DS级码农吉哥依然单身!  所以,他生平最恨情人节,不管是214还是77,他都讨厌!    吉哥观察了214和77这两个数,发现:  2+1+4=7  7+7 ...

  7. HDU - 4507 吉哥系列故事——恨7不成妻(数位dp)

    题目链接:点击查看 题目大意:给出闭区间[l,r],求出区间内与7不沾边的数的平方和 与7有关的条件: 整数中某一位是7: 整数的每一位加起来的和是7的整数倍: 这个整数是7的整数倍: 题目分析:抛去 ...

  8. 吉哥系列故事——恨7不成妻(数位 DP)

    吉哥系列故事--恨7不成妻 ∑i=1n(pre+suc)2∑i=1npre2+suc2+2×pre×sucn×pre2+∑suc2+2×pre∑suc\sum_{i = 1} ^{n}(pre + s ...

  9. HDU 4507 吉哥系列故事——恨7不成妻(数位DP)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove Tencent马拉松初赛第二场的鬼畜题... 其实 ...

最新文章

  1. 那些珍贵的「视觉SLAM」课程资料总结(补充版/完整版)
  2. 记WinCE下调试SIM900 GSM module
  3. Pycharm 解决pip遇到的错误:module 'pip' has no attribute 'main'
  4. python安装lxml,在windows环境下
  5. RabbitMQ交换器Exchange介绍与实践
  6. spring controller 增加header字段forward_Spring 注解编程之模式注解
  7. [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
  8. color a dir/s_揭发Wuli杨幂的quot;A字裙quot;执念!一款裙也要72变!
  9. 解决问题win10无线网卡:无法连接到此网络
  10. 码农翻身之我是一个线程 --- 读书笔记
  11. 应用性能管理APM巅峰对决:skywalking P.K. Pinpoint
  12. HTML5利用canvas画布绘制哆啦A梦
  13. 职业生涯规划(计算机网络),职业生涯规划(计算机网络)
  14. java格式化XML文件
  15. Kali LInux 下Osmocom-BB开源项目
  16. c# 指定打开某个路径下的CMD_这招太厉害了,不用鼠标也可以打开指定文件
  17. 你知道CMA与CNAS的区别和联系是什么吗?
  18. mini2440LED驱动程序开发
  19. tomcat发布前端项目
  20. 如何用python制作炫酷的个人足迹地图?

热门文章

  1. 机器学习与深度学习常见面试问题与答案
  2. 强烈安利!这个私藏已久的神器!
  3. 【分享】计算机视觉方向必备opencv基础知识总览
  4. 使用 NumPy 的标准化技巧
  5. 链表问题11——两个单链表相交的系列问题(三):判断两个有环链表是否相交
  6. Eclipse 最常用的 10 组快捷键,个个牛逼!
  7. egg(113)--egg之登录成功跳转到登录之前的页面
  8. 改名之后的Java EE,现在有什么新进展?
  9. UBOOT启动内核过程
  10. 基本lnmp平台的搭建(源码编译)