acwing1086||HDU4507数位dp[恨7不成妻]
题目链接
题目大意:给你区间∈[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不成妻]相关推荐
- HDU-4507 吉哥系列故事――恨7不成妻 (数位dp)
J - 吉哥系列故事――恨7不成妻 HDU - 4507 题解:数位dp 和简单的数位dp不同,这道题要算所有合法数的平方和 考虑到一个数可以写成X=ΣAi*Pi,(其中Ai为X每一位的值,Pi=10 ...
- hdu4507吉哥系列故事——恨7不成妻 (数位dp)
Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: ...
- 【数位DP】恨7不成妻
[数位DP]恨7不成妻 时间限制: 1 Sec 内存限制: 128 MB 提交: 8 解决: 4 [提交] [状态] [命题人:admin] 题目描述 单身! 依然单身! 吉哥依然单身! DS级码 ...
- HDU 4507 吉哥系列故事――恨7不成妻 数位DP
吉哥系列故事--恨7不成妻 Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- HDU - 4507 吉哥系列故事――恨7不成妻 (数位DP)
Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 ...
- HDU 4507 吉哥系列故事――恨7不成妻 (平方拆解 + *数位DP 总结)
单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7 ...
- HDU - 4507 吉哥系列故事——恨7不成妻(数位dp)
题目链接:点击查看 题目大意:给出闭区间[l,r],求出区间内与7不沾边的数的平方和 与7有关的条件: 整数中某一位是7: 整数的每一位加起来的和是7的整数倍: 这个整数是7的整数倍: 题目分析:抛去 ...
- 吉哥系列故事——恨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 ...
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove Tencent马拉松初赛第二场的鬼畜题... 其实 ...
最新文章
- 那些珍贵的「视觉SLAM」课程资料总结(补充版/完整版)
- 记WinCE下调试SIM900 GSM module
- Pycharm 解决pip遇到的错误:module 'pip' has no attribute 'main'
- python安装lxml,在windows环境下
- RabbitMQ交换器Exchange介绍与实践
- spring controller 增加header字段forward_Spring 注解编程之模式注解
- [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
- color a dir/s_揭发Wuli杨幂的quot;A字裙quot;执念!一款裙也要72变!
- 解决问题win10无线网卡:无法连接到此网络
- 码农翻身之我是一个线程 --- 读书笔记
- 应用性能管理APM巅峰对决:skywalking P.K. Pinpoint
- HTML5利用canvas画布绘制哆啦A梦
- 职业生涯规划(计算机网络),职业生涯规划(计算机网络)
- java格式化XML文件
- Kali LInux 下Osmocom-BB开源项目
- c# 指定打开某个路径下的CMD_这招太厉害了,不用鼠标也可以打开指定文件
- 你知道CMA与CNAS的区别和联系是什么吗?
- mini2440LED驱动程序开发
- tomcat发布前端项目
- 如何用python制作炫酷的个人足迹地图?