HDU-4507 吉哥系列故事——恨7不成妻 数位DP
题意:给定区间[L, R]求区间内与7无关数的平方和。一个数当满足三个规则之一则认为与7有关:
1、整数中某一位是7;
2、整数的每一位加起来的和是7的整数倍;
3、这个整数是7的整数倍;
分析:初看起来确实有点麻烦,数位DP还是很容易看出来的,需要维护好三个值dp[ i ][ j ][ k ].num表示数位和为对7的余数为 j ,前面确定的数对7的余数为 k 的情况下, i 位任意与7无关的数一共有多少个;同理 dp[ i ][ j ][ k ].sum 表示这些数的和为多少;dp[ i ][ j ][ k ].sqr 表示这些数的平方和为多少,这三者之间是可以递推的,详见代码。个人觉得将区间左右边界同时代入求解更加优美。
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long LL;
const int mod = int(1e9)+;
int hbit[], lbit[];
int _POW[];
struct STATUS {
int num, sum, sqr;
bool flag;
STATUS(int _num, int _sum, int _sqr) : num(_num), sum(_sum), sqr(_sqr) {}
STATUS() : flag(false) {}
// sum = sum {cur*10^p*num' + sum'}
// sqr = sum {num'*(cur*10^p)^2 + sqr' + 2*cur*10^p*sum'}
}dp[][][]; STATUS cal(int p, int srem, int mrem, bool lb, bool hb) {
if (p == ) {
if (srem != && mrem != ) return STATUS(, , );
else return STATUS(, , );
}
if (!lb && !hb && dp[p][srem][mrem].flag) {
return dp[p][srem][mrem];
}
STATUS ret(, , ), tmp;
int sta = lb ? lbit[p] : ;
int end = hb ? hbit[p] : ;
for (int i = sta; i <= end; ++i) {
if (i == ) continue;
tmp = cal(p-, (srem+i)%, (mrem*+i)%, lb&&i==sta, hb&&i==end);
ret.num = (1LL*ret.num + 1LL*tmp.num) % mod;
ret.sum = (1LL*ret.sum + 1LL*i*_POW[p-]%mod*tmp.num%mod+tmp.sum) % mod;
ret.sqr = (1LL*ret.sqr + 1LL*i*_POW[p-]%mod*i%mod*_POW[p-]%mod*tmp.num%mod + 1LL*tmp.sqr + 2LL*i*_POW[p-]%mod*tmp.sum%mod)%mod;
}
if (!lb && !hb) {
dp[p][srem][mrem] = ret;
dp[p][srem][mrem].flag = true;
}
return ret;
} int count(LL l, LL r) {
memset(lbit, , sizeof (lbit));
memset(hbit, , sizeof (hbit));
int lidx = , hidx = ;
while (l) {
lbit[lidx++] = l % ;
l /= ;
}
while (r) {
hbit[hidx++] = r % ;
r /= ;
}
return cal(max(lidx-, hidx-), , , true, true).sqr;
} int main() {
_POW[] = ;
for (int i = ; i < ; ++i) {
_POW[i] = (1LL*_POW[i-]*) % mod;
}
int T;
LL l, r;
scanf("%d", &T);
while (T--) {
scanf("%I64d %I64d", &l, &r);
printf("%d\n", count(l, r));
}
return ;
}
HDU-4507 吉哥系列故事——恨7不成妻 数位DP的更多相关文章
- 吉哥系列故事——恨7不成妻(数位DP)
吉哥系列故事——恨7不成妻 http://acm.hdu.edu.cn/showproblem.php?pid=4507 Time Limit: 1000/500 MS (Java/Others) ...
- HDU - 4507 - 吉哥系列故事——恨7不成妻(数位DP,数学)
链接: https://vjudge.net/problem/HDU-4507 题意: 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都 ...
- hdu4507吉哥系列故事——恨7不成妻 (数位dp)
Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: ...
- hdu-4507 吉哥系列故事——恨7不成妻 数位DP 状态转移分析/极限取模
http://acm.hdu.edu.cn/showproblem.php?pid=4507 求[L,R]中不满足任意条件的数的平方和mod 1e9+7. 条件: 1.整数中某一位是7:2.整数的每一 ...
- HDU 4507 吉哥系列故事――恨7不成妻(数位DP+结构体)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题目大意:如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关 1.整数中某一位是7: ...
- HDU 4507 吉哥系列故事——恨7不成妻
需要推下平方和的式子..维护个数,和,平方和. #include<iostream> #include<cstdio> #include<cstring> #inc ...
- HDU 4507 吉哥系列故事——恨7不成妻 (数位DP)
题意: 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关: 1.整数中某一位是7: 2.整数的每一位加起来的和是7的整数倍: 3.这个整数是7的整数倍: 给定一个区间[L,R],问在此区 ...
- 【hdu4507】吉哥系列故事——恨7不成妻 数位dp
题目描述 求 $[L,R]$ 内满足:数位中不包含7.数位之和不是7的倍数.本身不是7的倍数 的所有数的平方和 mod $10^9+7$ . 输入 输入数据的第一行是case数T(1 <= T ...
- hdu4507 吉哥系列故事——恨7不成妻[数位DP]
这题面什么垃圾玩意儿 首先看到问题格式想到数位DP,但是求的是平方和.尝试用数位DP推出. 先尝试拼出和.设$f[len][sum][mod]$表示填到$len$位,已填位置数位和$sum$,数字取余 ...
随机推荐
- 获取一个字符串中每一个字母出现的次数使用map集合
package 获取字符串中单字符出现次数; import java.util.Scanner; import java.util.TreeMap; /* * 需求:获取一个字符串中每一个字母出现的次 ...
- 自动封装Servlet HttpServletRequest请求成为一个POJO对象
自己写了个小工具类,将Servlet里面的HttpServletRequest请求封装成为一个POJO对象,可以复习一下Java的反射原理,开发中这个没什么用,毕竟都用MVC框架,框架都自带这种功能, ...
- Hibernate,JPA注解@SecondaryTables
使用类一级的 @SecondaryTable或@SecondaryTables注解可以实现单个实体到多个表的映射. 使用 @Column或者 @JoinColumn注解中的table参数可指定某个列所 ...
- linux ar命令
当我们的程序中有经常使用的模块,而且这种模块在其他程序中也会用到,这时按照软件重用的思想,我们应该将它们生成库,使得以后编程可以减少开发代码量.这里介绍命令ar,用来对库操作. 1.ar基本用法 ar ...
- cookie与localstorage和sessionstorage的区别比较
保存位置: 三者均保存在浏览器端,且同源的. 与服务器的关系: cookie 数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递. sessionStorage ...
- 关于数据库表中的索引及索引列的CRUD
-- 查询一个数据库表中的索引及索引列use [RuPengWangDB]GOSELECT indexname = a.name , tablename = c. name , indexcolu ...
- linux里用cmake安装的软件要怎么卸载?
找到make install之后产生的这个文件install_manifest.txt 这里在build文件里面有一个 install_manifest.txt,在里面有安装的所有东西的路径,删除它们 ...
- 本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的
本地计算机上的MSSQLSERVER服务启动后又停止了.一些服务自动停止,如果它们没有什么可做的 笔者ASP运行环境:操作系统为Windows XP SP2,IIS的版本为默认的5.1,数据库为SQL ...
- Bootstrap——基本模板
<!DOCTYPE html><html lang="zh-cn"> <head> <meta charset="utf ...
- java--4种内部类
内部类: 一 非静态内部类 //非静态内部类 //非静态内部类可任意调用外部类的局部变量,无论是否private //在外部类中要实例化内部类:InnerClass inner = new Inner ...