这题面什么垃圾玩意儿


首先看到问题格式想到数位DP,但是求的是平方和。尝试用数位DP推出。

先尝试拼出和。设$f[len][sum][mod]$表示填到$len$位,已填位置数位和$sum$,数字取余为$mod$时候的方案数,$g[len][sum][mod]$表示在这种情况下的所有满足要求的数的和(指的是后面剩余空位部分的数的和,前面填好的是不算的)。

那么枚举所填的数$i$,对于每一个满足要求的$x$,填上一个$i$之后变为

$10^{len-1}i+x$

(下$f[len-1][(sum+i)\mod 7][(10mod+i)\mod 7]$简记$f'$,$g,h$同理)

于是对于每一个$i$都有一次累加作用,这些$x$的和推过来应当是

$g[len][sum][mod]=\sum\limits_{i} (10^{len-1}if'+g')$

于是就完成了$g$的递推。$h$表示后面空位的数的平方和,也类似推法。

$h[len][sum][mod]=\sum\limits_{i} (10^{len-1})^2 i^2 f' + \sum\limits_{i} 2\times 10^{len-1} i f' + g'$

然后再每一次$i$的dfs完成之后进行递推。

注意这里的实现有一个小技巧,把$f,g,h$全部放结构体里,这样dp完一次之后直接取get他的整个包$f,g,h$,就不用考虑什么卡上界或者费事记录额外的东西了。

WA1:longlong输入又忘了。。

WA2:取模好好写。。不要老想着减少取模,不然会漏考虑的,万一真的要避免取模应当严格讨论加减乘除数的范围。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define dbg(x) cerr << #x << " = " << x <<endl
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int P=1e9+;
int bin[],bin2[];
struct thxorz{
int f,g,h;
thxorz(int f=-,int g=,int h=):f(f),g(g),h(h){}
}f[][][];
int b[];
int T;
ll L,R;//mistake
thxorz dp(int len,int sum,int mod,int limit){
if(!len)return thxorz(sum&&mod,,);
if(!limit&&~f[len][sum][mod].f)return f[len][sum][mod];
int num=limit?b[len]:;
thxorz ret,tmp;ret.f=;
for(register int i=;i<=num;++i)if(i^){
tmp=dp(len-,(sum+i)%,(mod*+i)%,limit&&i==num);//mistake2
ret.f+=tmp.f;ret.f>=P&&(ret.f-=P);
ret.g=(tmp.g+bin[len-]*1ll*tmp.f%P*i+ret.g)%P;
ret.h=(bin2[len-]*1ll*tmp.f%P*i*i+tmp.h+*bin[len-]*1ll*tmp.g%P*i+ret.h)%P;
}
return limit?ret:f[len][sum][mod]=ret;
}
inline int solve(ll x){
int len=;while(x)b[++len]=x%,x/=;
return dp(len,,,).h;
} int main(){//freopen("test.in","r",stdin);//freopen("test.ans","w",stdout);
for(register int i=,res=;i<=;++i,res=res*1ll*%P)bin[i]=res,bin2[i]=res*1ll*res%P;
read(T);while(T--)read(L),read(R),printf("%d\n",(solve(R)-solve(L-)+P)%P);
return ;
}

hdu4507 吉哥系列故事——恨7不成妻[数位DP]的更多相关文章

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

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

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

    题意:给定区间[L, R]求区间内与7无关数的平方和.一个数当满足三个规则之一则认为与7有关:1.整数中某一位是7:2.整数的每一位加起来的和是7的整数倍:3.这个整数是7的整数倍: 分析:初看起来确 ...

  3. hdu-4507 吉哥系列故事——恨7不成妻 数位DP 状态转移分析/极限取模

    http://acm.hdu.edu.cn/showproblem.php?pid=4507 求[L,R]中不满足任意条件的数的平方和mod 1e9+7. 条件: 1.整数中某一位是7:2.整数的每一 ...

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

    吉哥系列故事——恨7不成妻 http://acm.hdu.edu.cn/showproblem.php?pid=4507 Time Limit: 1000/500 MS (Java/Others)   ...

  5. 【hdu4507】吉哥系列故事——恨7不成妻 数位dp

    题目描述 求 $[L,R]$ 内满足:数位中不包含7.数位之和不是7的倍数.本身不是7的倍数 的所有数的平方和 mod $10^9+7$ . 输入 输入数据的第一行是case数T(1 <= T ...

  6. [HDU4507]吉哥系列故事——恨7不成妻

    [HDU4507]吉哥系列故事--恨7不成妻 试题描述 单身!依然单身!吉哥依然单身!DS级码农吉哥依然单身!所以,他生平最恨情人节,不管是214还是77,他都讨厌!吉哥观察了214和77这两个数,发 ...

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

    传送门 一道比较综合的数位dp. 维护三个值:[L,R][L,R][L,R] 区间中与7无关的数的数量,与7无关的数之和,与7无关的数的的平方和. 然后可以用第一个值推第二个,第一个和第二个值推第三个 ...

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题目大意: 找到区间 \([L,R]\) 范围内所有满足如下条件的数的 平方和 : 不包含'7' ...

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

    吉哥系列故事--恨7不成妻 传送门 Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥 ...

随机推荐

  1. danbooru 图片下载工具。

    danbooru 是什么,查搜索引擎去吧. 试了四个站点 yande.re,konachan.com,danbooru.donmai.us,gelbooru.com ,其他就不知道了. 有的站点对搜索 ...

  2. XML模块,面向对象思想与类的定义

    今日内容 XML模块,面向对象思想,类的定义 1.XML模块 xml是一种可扩展的标记语言格式如下 使用 <> 作为标签格式 <tag style: '' color:read '' ...

  3. AE调用GP工具(创建缓冲区和相交为例)

    引用 Geoprocessing是ArcGIS提供的一个非常实用的工具,借由Geoprocessing工具可以方便的调用ArcToolBox中提供的各类工具,本文在ArcEngine9.2平台环境下总 ...

  4. 我和CMS的往事

    CMS(内容管理系统)放在web中理解,也就是我们常说的后台了,用于网站的日常管理.又到期末了,我们的课程——web程序设计,需要提交一份期末大作业,最近需要开发出一个基于JSP的简单web,所以呢, ...

  5. 【VS开发】设备控制台 (DevCon.exe) 命令

    设备控制台 (DevCon.exe) 命令 DevCon (DevCon.exe) 是一个命令行工具,可以显示有关运行 Windows 的计算机上设备的详细信息.还可以使用 DevCon 启用.禁用. ...

  6. WinForm笔记1:TextBox编辑时和DataGridView 单元格编辑时 的事件及其顺序

    TextBox 编辑框 When you change the focus by using the mouse or by calling the Focus method, focus event ...

  7. 第五次java实验报告

    Java实验报告 班级 计科二班 学号 20188437 姓名 何磊 完成时间2019/10/10 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实 ...

  8. java第一次实验总结&第三周总结

    Java第一次实验报告,java开发环境与简单的Java程序 一.实验目的 1.熟悉JDK开发环境 2.熟练掌握结构化程序设计方法 二.实验内容 打印输出所有的"水仙花数",所谓& ...

  9. Python全栈开发之3、深浅拷贝、变量和函数、递归、函数式编程、内置函数

    一.深浅拷贝 1.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # 定义变量 数字.字符串 # n1 = 123 n1 ...

  10. SpringBoot 使用Mybatis操作mysql示例

    1.准备数据库 创建数据库 create databases baodanjia; 创建帐号 create user 'baodanjia'@'%' identified by '123456' gr ...