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

HDU - 4507

要求一个区间中和7无关的数的平方和。

需要用数位DP维护3个值:

1.与7无关的数的个数

2.与7无关的数的和

3、与7无关的数的平方和。

第一个是与7无关的数的个数,就是简单的数位DP了,很常规。

第二个与7无关的数的和的维护需要用到第一个个数。

处理到第pos个数位时,加上i*10^pos * 后面的个数

第三个的维护需要用到前面两个

(pre*10^pos + next)^2= (pre*10^pos)^2+2*pre*10^pos*next +next^2

比如 45832=4*10^4+5832   (a+b)^2=a^2+b^2+2ab

45832的平方=(4*10^4)^2+2*4*10^4*5832+5832^2

假如45832到40000

(a+b1)^2=a^2+b1^2+2ab1

(a+b2)^2=a^2+b2^2+2ab2

(a+b3)^2=a^2+b3^2+2ab3

(a+b4)^2=a^2+b4^2+2ab4

整合一下

ans.sqsum+=(tmp.sqsum + ( (2*e[len-1]*i)%MOD )*tmp.sum)%MOD;

ans.sqsum+=( (tmp.cnt*e[len-1])%MOD*e[len-1]%MOD*i*i%MOD );

tmp.sqsum 相当于next^2( b1^2+b2^2+ b3^2+ b4^2)

(2*e[len-1]*i)%MOD )*tmp.sum相当于2*pre*10^pos*next    e[len-1]*i表a  tmp.sum表(b1+b2+b3+b4)

(tmp.cnt*e[len-1])%MOD*e[len-1]%MOD*i*i%MOD    tmp.cnt个a^2 相加

#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const long long MOD=1e9+7;
struct Node
{long long cnt,sum,sqsum;//个数 数字和 平方和
}dp[20][10][10];
int n,bit[20],t;
long long e[20],l,r,ans;
Node dfs(int len,int pre1,int pre2,int flag){if (len==0) {Node tmp;tmp.cnt=(pre1!=0&&pre2!=0);tmp.sum=tmp.sqsum=0;return tmp;}if (!flag&&dp[len][pre1][pre2].cnt!=-1) return dp[len][pre1][pre2];int end=flag?bit[len]:9;Node ans,tmp;ans.cnt=ans.sqsum=ans.sum=0;for (int i=0;i<=end;++i){if (i==7) continue;//跳过数字7tmp=dfs(len-1,(i+pre1)%7,(pre2*10+i)%7,flag&&i==end);ans.cnt+=tmp.cnt;ans.cnt%=MOD;ans.sum+=(tmp.sum+ ((e[len-1]*i)%MOD)*tmp.cnt%MOD )%MOD;ans.sum%=MOD;ans.sqsum+=(tmp.sqsum + ( (2*e[len-1]*i)%MOD )*tmp.sum)%MOD;ans.sqsum%=MOD;ans.sqsum+=( (tmp.cnt*e[len-1])%MOD*e[len-1]%MOD*i*i%MOD );ans.sqsum%=MOD;}if (!flag) dp[len][pre1][pre2]=ans;return ans;
}
long long slove(long long n)
{int len=0;while (n){bit[++len]=n%10;n/=10;}return dfs(len,0,0,1).sqsum;
}
int main()
{e[0]=1;for (int i=1;i<20;++i)e[i]=e[i-1]*10%MOD;for (int i=0;i<20;i++)for (int j=0;j<10;++j)for (int k=0;k<10;++k)dp[i][j][k].cnt=-1;scanf("%d",&t);while (t--){scanf("%lld%lld",&l,&r);ans=slove(r);ans-=slove(l-1);ans=(ans%MOD+MOD)%MOD;printf("%lld\n",ans);}return 0;
}

HDU4507 不要整数中 某一位是7 每一位加起来的和是7的整数倍 或是7的整数倍相关推荐

  1. ZT 计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48

    计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48 分类: C/C++ [转]计算一个无符整数中1Bit的个数(1) Count the number of bits th ...

  2. 求一批整数中出现最多的个位数字_C语言经典100例007-求低n-1位的数

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  3. 给定一个32位有符号整数,将整数中的数字进行翻转

    给定一个32位有符号整数,将整数中的数字进行翻转 解题思路就是不断的求模,然后取余,然后注意溢出问题: 代码: #include<stdlib.h> #include<stdio.h ...

  4. 位运算求整数中二进制1的个数

    package _位运算;public class _位运算求整数中1的个数 {public static void main(String[] args) {int n = 4;int ans = ...

  5. 将整数中每一位上为偶数的数依次取出构成新数

    将整数中每一位上为偶数的数依次取出构成新数 给定函数fun的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中.高位仍在高位,低位仍在低位.例如,当s中的数为:87653142时,t ...

  6. 编写程序数一下 1到 100 的所有整数中出现多少次数字9(对整数每一位的提取方法)...

    思路:要判断整数中出现9 的次数,可以将整数的每一位都提出来在依次进行判断,是否为9. 方法:对与一个一位数来说,对10取余数就是它本身.如:7%10==7 对于一个两位数来说,提取个位数字:对10取 ...

  7. shell最大出现和连续出现次数_从 1 到 n 整数中 1 出现的次数

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  8. 如何判断一个数是否在40亿个整数中?

    来自:互联网侦察 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT. 今天他就去BAT中的一家面试了. 简单的自我介绍后,面试官给了小史一个问题. [ ...

  9. 「BAT面试现场」如何判断一个数是否在40亿个整数中?

    https://www.toutiao.com/a6699639753467232771/ 作者:channingbreeze 来自:公众号互联网侦察 小史是一个应届生,虽然学的是电子专业,但是自己业 ...

  10. 【刷算法】整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

最新文章

  1. 机器人 瓷砖墙面清洗_瓷砖铺贴注意事项有哪些?
  2. 如何在Centos 7上用Logrotate管理日志文件
  3. UltraEdit中OracleSQL的syntax文档
  4. C#自定义序列化反序列化与 ISerializable 接口
  5. OOB套接字传输实例(达不到预期结果)
  6. 我们学过 飞鸽传书 的应该知道
  7. 工程计算软件_软件工程师的计算机基础理论知识体系
  8. linux下ORACLE之RAW创建
  9. DataFormatString 的使用
  10. 全网最详细的ensp模拟器安装教程
  11. react 最佳入门_详解React-Todos入门例子
  12. Unity 基础数据库操作( Myspl 和 PostgreSQL)
  13. 数据结构-六度空间(模拟六度分隔理论)
  14. 怎么获得MIUI12系统的root权限
  15. 从Dying gasp功能看Linux的响应速度
  16. 三菱模拟量fx3u4da_FX3U-4DA使用案例三菱FX3U-4DA用户手册(模拟量控制篇) - 广州正凌...
  17. Nexus Repository和Docker Registry镜像仓库搭建及使用
  18. DataX Transformer 源码分析及 UDF 扩展与使用
  19. 【朝花夕拾】朝花夕拾-Robot Framework实战演练之开篇
  20. 联想计算机电源维修,联想电脑主机FSP145-51N1型电源工作原理

热门文章

  1. 5+App下Mui框架开发仿拼多多App
  2. 百度SEO站群vivi万能小偷站群版3.5程序源码去除授权
  3. C++ 使用 openGL 实现吃豆人游戏
  4. DB2的数据库备份与恢复
  5. python登录it桔子网_解决IT桔子爬虫的登录问题
  6. 【微信小程序】如何利用云开发控制台的数据库实现用户登录操作。
  7. Qt 3D的研究(三):显示3D模型
  8. kali 2020 VMware 15.5.1 启动时出错 before you can run vmware, several modules must be complied and……
  9. 比较便宜的云服务器哪里有,好用吗?
  10. android微信加人有提示音吗,Android仿微信新消息提示音