HDU 4507 吉哥系列故事 恨7不成妻 (数位dp)
来源:互联网 发布:java 正则表达式 空格 编辑:程序博客网 时间:2024/05/17 10:54
题意:
中文题 题意很明显啦
分析:
题意要求平方和,但是做过类似线段树那种题目的人都知道不能直接维护的
可以通过cnt,sum,来算出sq
状态很明显嘛,dp[i][mod][sum]:=i位,数mod 7,数位和mod 7
cnt[i]=∑9d=0{cnt[d]}
sum[i]=∑9d=0{cnt[d]∗d∗10i−1+sum[d]}
sq[i]=∑9d=0{cnt[d]∗(d∗10i−1+xi−11)2}
=∑9d=0{cnt[d]∗{(d∗10i−1)2+2∗(d∗10i−1)∗xi−11+xi−112}}
=∑9d=0{cnt[d]∗(d∗10i−1)2+2∗(d∗10i−1)∗sum[d]+sq[d]}
代码:
//// Created by TaoSama on 2015-10-22// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;typedef long long LL;struct Node { LL cnt, sum, sq; Node(int x = -1) {cnt = sum = sq = x;}};Node dp[20][7][7];LL p[20], digit[20];Node dfs(int i, int mod, int sum, int e) { Node &f = dp[i][mod][sum], suf, ret(0); if(!i) { ret.cnt = mod && sum; return ret; } if(!e && ~f.cnt) return f; int to = e ? digit[i] : 9; for(int d = 0; d <= to; ++d) { if(d == 7) continue; suf = dfs(i - 1, (mod * 10 + d) % 7, (sum + d) % 7, e && d == to); LL ten = p[i - 1]; ret.cnt = (ret.cnt + suf.cnt) % MOD; LL b = d * ten % MOD, bsq = b * b % MOD; ret.sum = (ret.sum + b * suf.cnt % MOD + suf.sum) % MOD; ret.sq = (ret.sq + suf.cnt * bsq % MOD + 2 * b * suf.sum % MOD + suf.sq) % MOD; } return e ? ret : f = ret;}LL calc(LL x) { int cnt = 0; for(; x; x /= 10) digit[++cnt] = x % 10; return dfs(cnt, 0, 0, 1).sq;}int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); int t; scanf("%d", &t); p[0] = 1; for(int i = 1; i < 20; ++i) p[i] = p[i - 1] * 10 % MOD; while(t--) { LL l, r; scanf("%I64d%I64d", &l, &r); printf("%I64d\n", (calc(r) - calc(l - 1) + MOD) % MOD); } return 0;}
0 0
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- HDU - 4507 吉哥系列故事――恨7不成妻 (数位DP)
- hdu 4507 - 吉哥系列故事——恨7不成妻(数位dp)
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- HDU 4507 吉哥系列故事 恨7不成妻 (数位dp)
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- hdu 4507 吉哥系列故事——恨7不成妻(数位DP)
- hdu 4507 吉哥系列故事——恨7不成妻 数位DP
- hdu 4507 吉哥系列故事——恨7不成妻(数位DP,5级)
- 【数位DP】HDU 4507 吉哥系列故事——恨7不成妻
- HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
- 数位dp HDU 4507 吉哥系列故事——恨7不成妻
- hdu 4507 吉哥系列故事——恨7不成妻 (数位dp)
- [数位dp] hdu 4507 吉哥系列故事——恨7不成妻
- 【HDU】4507 吉哥系列故事——恨7不成妻 数位DP
- hdu 4507 吉哥系列故事――恨7不成妻 数位dp
- 【数位DP】【HDU 4507】吉哥系列故事——恨7不成妻
- ECSHOP如何解决购物车中商品自动消失问题 session 失效 丢失的问题
- C#读写Excel表格(续)二
- C01 C基础(含个人思维导图梳理)
- Cookie详解
- 定制自己的瀑布流
- HDU 4507 吉哥系列故事 恨7不成妻 (数位dp)
- Android Java和Native Memory Flame Graph
- 沉思一盲进
- 学习文章连载十五
- oracle某用户最近执行的sql
- what-to-tune-in-mysql-56-after-installation
- extends的方法调用
- scala中使用smart-json将json与map相互转换
- java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected