J - 吉哥系列故事――恨7不成妻

HDU - 4507

题解:数位dp
和简单的数位dp不同,这道题要算所有合法数的平方和

考虑到一个数可以写成X=ΣAi*Pi,(其中Ai为X每一位的值,Pi=10^i)
因为(A+B)^2=A*A+2*A*B+B*B
(X1+X2+X3+...+Xn)^2=X1^2+2*X1*(X2+X3+...+Xn)+(X2+X3+...+Xn)^2
=X1^2+2*X1*(X2+X3+...+Xn)+X2^2+2*X2*(X3+...+Xn)+(X3+...+Xn)^2
...
一直递归分治,即可求的

因此在dp时,只要记录当前状态合法数的数量cnt,当前状态之后的和sum,平方和sqr

A=Ai*Pi

now.cnt=now.cnt+nxt.cnt;

now.sum=now.sum+nxt.sum+A*nxt.cnt;
now.sqr=now.sqr+A*A*nxt.cnt+2*A*nxt.sum+nxt.sqrt;

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long LL;
const LL mod = 1e9 + 7;
int len,a[20];
LL p[20];
struct node{LL cnt,sqr,sum;bool vis;node(LL a=0,LL b=0,LL c=0,bool d=0){cnt=a;sqr=b;sum=c;vis=d;}
}dp[20][10][10];
node dfs(int i,LL mod1,LL mod2,bool mark){if(i==0){if(mod1%7==0||mod2%7==0) return node(0);return node(1);}if(dp[i][mod1][mod2].vis&&mark==0) return dp[i][mod1][mod2];int mx=mark?a[i]:9;node ret;for(int j=0;j<=mx;j++){if(j==7) continue;node tmp=dfs(i-1,(mod1+j)%7,(mod2*10+j)%7,mark&&j==mx);LL A=j*p[i-1]%mod;ret.cnt=(ret.cnt+tmp.cnt)%mod;ret.sum=(ret.sum+A*tmp.cnt%mod+tmp.sum)%mod;ret.sqr=(A*A%mod*tmp.cnt%mod+2*A*tmp.sum%mod+tmp.sqr+ret.sqr)%mod;}if(mark==0) {dp[i][mod1][mod2]=ret;dp[i][mod1][mod2].vis=1;}return ret;
}
LL solve(LL x){len=0;while(x) a[++len]=x%10,x/=10;node ret=dfs(len,0,0,1);return ret.sqr%mod;
}
int main(){int T;LL l,r;p[0]=1;for(int i=1;i<=18;i++) p[i]=p[i-1]*10;cin>>T;for(int cas=1;cas<=T;cas++){cin>>l>>r;cout<<(solve(r)-solve(l-1)+mod)%mod<<endl;}return 0;
}

HDU-4507 吉哥系列故事――恨7不成妻 (数位dp)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 【Ping】unix - ping命令的退出状态
  2. docker network
  3. FLutter入门:异步加载组件FutureBuilder
  4. Web3d明日之星基于Javascript和OpenGL的技术
  5. python10的因数_十五道Python小案例,学会这些,Python基础已过关!
  6. Windows Azure Storage (3) Windows Azure Storage Service存储服务之Blob详解(中)
  7. numpy.mean() in Python
  8. gulp html页面路径,通过gulp-connect部署静态页面,html页面中include路径无法get!
  9. 【机器学习中的数学】多项式分布及其共轭分布
  10. 【SPOJ - DQUERY】D-query【主席树 —— 区间中不同数的个数】
  11. PHP打印九九乘法表
  12. mysql查询这一周数据库_MYSQL查询一周,一月内的数据
  13. Ubuntu下声卡驱动解决方法alsa
  14. 线性代数A矩阵乘以A的转置的含义或者几何意义
  15. 怎么把视频做成背景html,HTML5设置视频背景的方法介绍
  16. [转]关于计算机研究生报考方向的简要介绍
  17. Fortran写nc文件nbsp;f90nbsp;netcdf
  18. 常用软件下载地址汇总
  19. CSCAD AutoCAD 修改光标颜色
  20. 360良医搭载人工智能 让互联网医疗信息服务更精准

热门文章

  1. ubuntu16.04更换清华源
  2. OkHttp 内存溢出问题 A connection to xxxxxx was leaked.
  3. 益企工程云荣获“2021中国软件和信息服务业年度工程建设领域值得信赖产品”
  4. mv强制覆盖 shell_shell mv命令
  5. 使用FontLab Studio制作字体
  6. HttpsCA证书的申请和安装
  7. http组成部分_博客的组成部分| 第2部分
  8. 千锋教育实训day04————java
  9. 黑客必读:蜜罐技术的前世今生
  10. Python计算限制性核酸内切酶切割后的核酸片段及其片段分子量