http://acm.hdu.edu.cn/showproblem.php?pid=4507

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
  1. 3
  2. 1 9
  3. 10 11
  4. 17 17
 
Sample Output
  1. 236
  2. 221
  3. 0
 

  1. /***
  2. hdu 4507 数位dp(求和,求平方和)
  3. 解题思路:dp[len][sum1][sum2] 表示长度为len对7取模为sum1。各位上的数字和为sum2有多少个满足的数
  4. 一个是与7无关的数的个数。就是简单的数位DP了,非经常规。
  5.  
  6. 第二个与7无关的数的和的维护须要用到第一个个数。
  7. 处理到第pos个数位时,加上i*10^pos * 后面的个数
  8. 第三个的维护须要用到前面两个
  9. (pre*10^pos + next)^2= (pre*10^pos)^2+2*pre*10^pos*next +next^2
  10. */
  11. #include <stdio.h>
  12. #include <algorithm>
  13. #include <string.h>
  14. #include <iostream>
  15. using namespace std;
  16. typedef long long LL;
  17. const LL mod=1e9+7;
  18. LL l,r,p[25];
  19. int bit[25];
  20.  
  21. struct node
  22. {
  23. LL cnt,sum,sqsum;
  24. } dp[25][10][10];
  25.  
  26. node dfs(int len,int sum1,int sum2,int flag)
  27. {
  28. if(len<0)
  29. {
  30. node tmp;
  31. tmp.cnt=(sum1!=0&&sum2!=0);
  32. tmp.sum=tmp.sqsum=0;
  33. return tmp;
  34. }
  35. if(flag==0&&dp[len][sum1][sum2].cnt!=-1)return dp[len][sum1][sum2];
  36. node ans,tmp;
  37. int end=flag?bit[len]:9;
  38. ans.cnt=ans.sqsum=ans.sum=0;
  39. for(int i=0; i<=end; i++)
  40. {
  41. if(i==7)continue;
  42. tmp=dfs(len-1,(sum1+i)%7,(sum2*10+i)%7,flag&&i==end);
  43. ans.cnt+=tmp.cnt;
  44. ans.cnt%=mod;
  45. ans.sum+=(tmp.sum+i*p[len]%mod*tmp.cnt%mod)%mod;
  46. ans.sum%=mod;
  47. ans.sqsum+=(tmp.sqsum+2*p[len]*i%mod*tmp.sum%mod)%mod;
  48. ans.sqsum%=mod;
  49. ans.sqsum+=(tmp.cnt*p[len]%mod*p[len]%mod*i*i%mod);
  50. ans.sqsum%=mod;
  51. }
  52. if(flag==0)dp[len][sum1][sum2]=ans;
  53. return ans;
  54. }
  55. LL solve(LL n)
  56. {
  57. int len=0;
  58. while(n)
  59. {
  60. bit[len++]=n%10;
  61. n/=10;
  62. }
  63. return dfs(len-1,0,0,1).sqsum;
  64. }
  65. int main()
  66. {
  67. p[0]=1;
  68. for(int i=1; i<20; i++)
  69. p[i]=(p[i-1]*10)%mod;
  70. for(int i=0; i<25; i++)
  71. {
  72. for(int j=0; j<10; j++)
  73. {
  74. for(int k=0; k<10; k++)
  75. {
  76. dp[i][j][k].cnt=-1;
  77. }
  78. }
  79. }
  80. int T;
  81. scanf("%d",&T);
  82. while(T--)
  83. {
  84. scanf("%I64d%I64d",&l,&r);
  85. printf("%I64d\n",((solve(r)-solve(l-1))%mod+mod)%mod);
  86. }
  87. return 0;
  88. }

hdu 4507 数位dp(求和,求平方和)的更多相关文章

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

    思路  和普通的DP不一样的是 这里求的是满足条件的数的平方的和 而数位DP只跟数每位是什么密切相关  所以要开一个结构 (多加一个 数的和sum 和平方和qsum)存一下各个状态的和的情况 dp[p ...

  2. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. HDU 5808[数位dp]

    /* 题意: 给你l和r,范围9e18,求l到r闭区间有多少个数字满足,连续的奇数的个数都为偶数,连续的偶数的个数都为奇数. 例如33433符合要求,44不符合要求.不能含有前导零. 思路: 队友说是 ...

  4. Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum (数位dp求和)

    题目链接:https://codeforces.com/contest/1073/problem/E 题目大意:给定一个区间[l,r],需要求出区间[l,r]内符合数位上的不同数字个数不超过k个的数的 ...

  5. 2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6156 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6156 题意:如题. 解法:数位DP,暴力枚举进制之后,就转化成了求L,R区间的回文数的个数,这个直接做 ...

  6. HDU 4352 XHXJ's LIS HDU(数位DP)

    HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...

  7. HDU 3652(数位DP)

    题目链接:B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. hdu 2089 数位dp

    链接:https://vjudge.net/problem/23625/origin 中文,题目不用说了. 其实这题的数据很小,所以直接暴力也可以过,但是还是要学会数位dp,因为并不是每一题的数据都会 ...

  9. 数位dp(求1-n中数字1出现的个数)

    题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为 ...

随机推荐

  1. svn密码问题

    官方书籍version control with svn提到了这个问题: Disabling Password Caching When you perform a Subversion operat ...

  2. PHP通过Thrift操作Hbase

    PHP通过Thrift操作Hbase     HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量col ...

  3. 关于libgdx中UI控件的旋转和缩放的备忘

    最近遇到这样一个问题,定义了一个ImageButton后,想对按钮进行下旋转,结果setRotation(-90f),不起作用.后来在官网上找到了原因 关于UI控件的旋转 缩放官网上有这样一段话(链接 ...

  4. [转]apache下htaccess不起作用,linux,windows详解

    可能出现下面这三种的错误可能性: 第一种:启用 rewrite 和 .htaccess 设置 rewrite设置:找到apache的配置文件httpd.conf文件,找到:#LoadModule re ...

  5. saltstack:使用教程之二高级模块用法Grains、Pillar

    1.grains用法: 在客户端服务启动的时候收集客户的基础信息,在配置发生变化后也可以通过master重新同步 显示一个客户端的所有项目: [root@node5 ~]# salt "no ...

  6. 旧版本mysql下载大全,爽~~

    http://mirror.cogentco.com/pub/mysql/MySQL-4.1/ http://mirror.cogentco.com/pub/mysql/MySQL-5.0/ http ...

  7. Codeforces Round #258 (Div. 2) 小结

    A. Game With Sticks (451A) 水题一道,事实上无论你选取哪一个交叉点,结果都是行数列数都减一,那如今就是谁先减到行.列有一个为0,那么谁就赢了.因为Akshat先选,因此假设行 ...

  8. CloudStack全局配置參数

    參数 描写叙述 类型 默认值 account.cleanup.interval 清除用户账户所须要等待的时间(秒) 整数 86400 agent.lb.enabled If agent load ba ...

  9. No http handler was found for request type 'GET'

    asp.net 运用统计图表的时候,在本地运行,没有问题,发布到服务器上的IIS后,就报这个错误,具体错误 看图 这个图片真恶心,网上找了下,资料不多,但是还是有个能真正解决问题的, 解决方法是,在w ...

  10. WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)

    原文:WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济 ...