HDU4507 吉哥系列故事――恨7不成妻 数位DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507
题意:求[L,R](1 <= L <= R <= 10^18)区间内和7无关的数字的平方和。
如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关——
1、整数中某一位是7;
2、整数的每一位加起来的和是7的整数倍;
3、这个整数是7的整数倍;
想法:如果不是求平方和,而是求个数的话,很容易写。重点就是如何求平方和:开一个三维dp[i][j][k]结构体,i表示第i位,j表示到从最高位到第i位的每一位的累加和模7,k表示最高位到第i位的数值模7,结构体由和7有关的数的个数(cnt),和7有关的数的和(sum),和7有关的数的平方和(squ_sum)组成。cnt很容易求,若求出cnt的话,在这个过程中加上i*a[pos]*cnt,sum也求出来了。对于求平方和因为(a+b)^2=a^2+b^2+2*a*b,所以squ_sum=squ_sum(后面的)+(i*b[pos]*cnt)^2+2*sum*i*b[pos]*cnt;(b[pos]相当于10^pos)
代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<queue>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define bug() puts("wtf???")
#define inf 0x3f3f3f3f
#define scanfprint() freopen("1input.txt","r",stdin)
#define printfprint() freopen("output.txt","w",stdout)
#define mem(a,b) memset(a,b,sizeof(a))
const int spot=1000+10;
const int edge=100000+10;
const int maxn=100000+10;
const double pi=acos(-1.0);
const ll l_mod=1e9+7;
const double ips=0.000001;
struct stu
{ll cnt,sum,squ_sum;
} dp[25][10][10];
ll a[25],b[25];
void init()
{int i;b[1]=1;for(i=2; i<=19; i++)b[i]=b[i-1]*10%l_mod;memset(dp,-1,sizeof(dp));
}
stu dfs(int pos,int sum,int mod,int last)
{if(!pos){stu temp={0};temp.cnt=sum&&mod;temp.sum=temp.squ_sum=0;return temp;}if(!last&&dp[pos][sum][mod].cnt!=-1)return dp[pos][sum][mod];stu temp={0},ans={0};int num=last?a[pos]:9,i;for(i=0; i<=num; i++){if(i==7) continue;temp=dfs(pos-1,(sum+i)%7,(mod*10+i)%7,i==num&&last);ans.cnt=ans.cnt+temp.cnt;ans.cnt%=l_mod;ans.sum+=(temp.cnt*i%l_mod*b[pos]%l_mod+temp.sum)%l_mod;ans.sum%=l_mod;ans.squ_sum+=(temp.squ_sum + 2*b[pos]*i%l_mod*temp.sum)%l_mod;ans.squ_sum%=l_mod;ans.squ_sum+=( temp.cnt*b[pos]%l_mod*b[pos]%l_mod*i*i%l_mod);ans.squ_sum%=l_mod;}if(!last)dp[pos][sum][mod]=ans;return ans;
}
ll cal(ll n)
{int sizes=0;while(n)a[++sizes]=n%10,n/=10;stu ans=dfs(sizes,0,0,1);return ans.squ_sum;
}
int main()
{int nn;init();scanf("%d",&nn);while(nn--){ll l,r;cin>>l>>r;ll ans=cal(r)-cal(l-1);ans=(ans%l_mod+l_mod)%l_mod;cout<<ans<<endl;}return 0;
}
HDU4507 吉哥系列故事――恨7不成妻 数位DP相关推荐
- HDU-4507 吉哥系列故事――恨7不成妻 (数位dp)
J - 吉哥系列故事――恨7不成妻 HDU - 4507 题解:数位dp 和简单的数位dp不同,这道题要算所有合法数的平方和 考虑到一个数可以写成X=ΣAi*Pi,(其中Ai为X每一位的值,Pi=10 ...
- hdu4507吉哥系列故事——恨7不成妻 (数位dp)
Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: ...
- HDU 4507 吉哥系列故事――恨7不成妻 数位DP
吉哥系列故事--恨7不成妻 Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- HDU - 4507 吉哥系列故事——恨7不成妻(数位dp)
题目链接:点击查看 题目大意:给出闭区间[l,r],求出区间内与7不沾边的数的平方和 与7有关的条件: 整数中某一位是7: 整数的每一位加起来的和是7的整数倍: 这个整数是7的整数倍: 题目分析:抛去 ...
- HDU4507吉哥系列故事――恨7不成妻
单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7 ...
- 吉哥系列故事——恨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 ...
- HDU 4507 吉哥系列故事——恨7不成妻 详解(变态数位DP)
Problem Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: ...
- HDU - 4507 吉哥系列故事――恨7不成妻 (数位DP)
Description 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 ...
- HDU 4507 吉哥系列故事――恨7不成妻 (平方拆解 + *数位DP 总结)
单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7 ...
最新文章
- 《权力的游戏》最终季上线!谁是你最喜爱的演员?这里有一份Python教程 | 附源码...
- LeetCode题解之Largest Number
- Java线程之核心概念
- 安卓学习 之 网络技术(十)
- php详解递归,PHP递归算法详解
- [Leedcode][JAVA][第11题][盛最多水的容器][双指针][贪心]
- 嵌入式工程师薪资调查
- LeetCode 1563. 石子游戏 V(DP)
- 论网络安全(观直播后感)
- 慢雾安全工程师:安全审计是目前保护 DeFi 项目安全最高性价比的方式
- 百度语音合成 js html,百度文字转语音免费接口使用实例
- EasyUI 异步Tree
- EventBus BackgroundPoster原理解析
- 通达oa 2013 php解密,通达OA 2011-2013 通杀GETSHELL修复补丁
- 机械臂模糊PID控制matlab仿真
- Adams 线性多步积分器(一)
- 这是一份文科生都能看懂的线性代数简介
- 新手建站推广完美教程(重点推荐)
- 软件测试与代码安全详解
- 2021软科中国计算机专业排名
热门文章
- c语言二维数组怎么找鞍点,怎么求一个二维数组的鞍点
- 白名单网站有哪些?盘点国家级门户网站认可的白名单来源媒体
- 【DBeaver】介绍DBeaver这一款强大的数据库连接工具
- 康佳液晶电视(非智能)Mstar V56 芯片
- Git、Gerrit、Repo三者的区别及使用
- Python读取excel表格数据并绘制成柱状图 | 数据排序、柱状图颜色、标签乱码等问题通通能够解决!
- Print Spooler服务对打印的影响
- 明日方舟统计寻访工具【附下载链接】
- [zt] Big-Endian VS Little-Endian —— 从大头开始还是小头开始
- Oracle内置SQL函数-分类整理大全