Problem Description
单身!
  依然单身!
  吉哥依然单身!
  DS级码农吉哥依然单身!
  所以,他生平最恨情人节,不管是214还是77,他都讨厌!
  
  吉哥观察了214和77这两个数,发现:
  2+1+4=7
  7+7=7*2
  77=7*11
  最终,他发现原来这一切归根到底都是因为和7有关!所以,他现在甚至讨厌一切和7有关的数!

  什么样的数和7有关呢?

  如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关——
  1、整数中某一位是7;
  2、整数的每一位加起来的和是7的整数倍;
  3、这个整数是7的整数倍;

  现在问题来了:吉哥想知道在一定区间内和7无关的数字的平方和。

Input
输入数据的第一行是case数T(1 <= T <= 50),然后接下来的T行表示T个case;每个case在一行内包含两个正整数L, R(1 <= L <= R <= 10^18)。
Output
请计算[L,R]中和7无关的数字的平方和,并将结果对10^9 + 7 求模后输出。
Sample Input
  
3 1 9 10 11 17 17
Sample Output
  
236 221 0
感悟:数位dp还是用记忆化搜索好。思路:用dp[i][j][k]表示第i位(这里的前i位指的是从len位循环到第i位的状态)前面几位位数和%7的值为j,前面所代表十进制数%7的状态。这个状态用一个结构体node 表示,node里面记录的是这个状态下后面符合条件的数的个数,和,平方和。为什么要记录这三个呢?是因为平方和能用它们三个表示。对于一个十进制数,比如756,756^2=(700+56)^2=700^2+56^2+2*700*56,所以就可以推得规律:ans.cnt+=temp.cnt;ans.sum+=temp.cnt*j*p[pos-1 ]+temp.sum; //p[pos-1]=10^(pos-1)
ans.sqsum+=temp.sqsum+2*(p[pos-1]*temp.sum*j)+p[pos-1]*p[pos-1]*temp.cnt*j*j;
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define MOD 1000000007
struct node{ll cnt;  //个数ll sum;  //总和ll sqsum; //所有符合数的前面部分平方和
}dp[25][11][11]; //前i位,位数和%7为j,值和%7为kll p[25];
void init(){int i,j;p[0]=1;for(i=1;i<=20;i++){p[i]=(p[i-1]*10)%MOD;}
}int wei[30];
node dfs(ll pos,ll num,ll sum,ll flag)
{int i,j;node ans;ans.cnt=ans.sum=ans.sqsum=0;if(pos==0){if(flag=1 && num!=0 && sum!=0){ans.cnt=1;}return ans;}if(!flag && dp[pos][num][sum].cnt!=-1){return dp[pos][num][sum];}int ed;if(flag)ed=wei[pos];else ed=9;for(j=0;j<=ed;j++){if(j==7)continue;node temp=dfs(pos-1,(j+num)%7,(sum*10+j)%7,flag&&(j==ed) );ans.cnt+=temp.cnt;ans.cnt%=MOD;ans.sum+=(temp.cnt*j%MOD*p[pos-1 ]%MOD+temp.sum )%MOD;ans.sum%=MOD;ans.sqsum+=(temp.sqsum+2*(p[pos-1]*temp.sum%MOD*j)%MOD  )%MOD;ans.sqsum%=MOD;ans.sqsum+=(p[pos-1]*p[pos-1]%MOD*temp.cnt%MOD*j*j)%MOD;ans.sqsum%=MOD;}if(!flag){dp[pos][num][sum]=ans;}return ans;
}node solve(ll x)
{int i,j,k,len=0;ll t=x;while(t){wei[++len]=t%10;t/=10;}for(i=0;i<20;i++){for(j=0;j<9;j++){for(k=0;k<9;k++){dp[i][j][k].cnt=-1;}}}return dfs(len,0,0,1);}int main()
{int i,j,T;ll n,m;init();scanf("%d",&T);while(T--){scanf("%lld%lld",&m,&n);printf("%lld\n",((solve(n).sqsum-solve(m-1).sqsum)%MOD+MOD)%MOD );}
}

hdu4507吉哥系列故事——恨7不成妻 (数位dp)相关推荐

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

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

  2. HDU4507 吉哥系列故事――恨7不成妻 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题意:求[L,R](1 <= L <= R <= 10^18)区间内和7无关的 ...

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

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

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

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

  5. HDU4507吉哥系列故事――恨7不成妻

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

  6. 吉哥系列故事——恨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 ...

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

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

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

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

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

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

最新文章

  1. CF-311B Cats Transport(斜率优化DP)
  2. 11岁美国男孩用玩具熊“黑”了国际网络安全大会
  3. 考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
  4. 转载 干货 | 1400篇机器学习的文章中,这10篇是最棒的!
  5. java 设计模式学习笔记十 bridge桥模式
  6. 《51单片机应用开发从入门到精通》——2.6 中断控制功能的作用
  7. 缴纳满15年养老保险退休金每月1200块钱左右,值得缴吗?
  8. [nodejs]国内npm安装nodejs modules失败的几个解决方案
  9. OpenCV辅助对象(help objects)(3)——Ptr
  10. Unity开发《一起来捉妖》教程 | 1.陀螺仪控制相机
  11. adb server version (31) doesn‘t match this client (39) 解决方案
  12. 20210520:人脸识别-口罩mask快速抠取
  13. 二进制和十六进制的转换操作
  14. Java ServiceLoader使用和解析
  15. uni.navigateTo页面跳转时传对象参数
  16. 7-1 图的先深搜索+7-2 图的先广搜索
  17. 掌阅书架上的书怎么删除
  18. ByteBuffer常用方法与分析
  19. 昕友亿方InfoPath智能平台软件视频教程公开,4分钟学会轻松定制企业级应用软件
  20. OpenHarmony内核开发

热门文章

  1. 教你如何迅速秒杀掉:99%的海量数据处理面试题(转)
  2. PFLD: A Practical Facial Landmark Detector
  3. java面试设计题:羽毛球馆管理员;
  4. 自顶向下 | 带你遨游运输层
  5. 大脸猫:网站优化之发现一直有人抄写自己的原创文章,该怎么办?
  6. Android 8.0解决的OkHttp问题:A connection to xxx was leaked. Did you forget to close a response body?
  7. python网络爬虫(第十一章:Scrapy终端与核心组件)
  8. 血管紧缩素Angiotensinogen(1-14), porcine、20845-02-7
  9. 80老翁谈人生(158):老翁问责进行时
  10. 按照指定起始和截止时间分割视频