Link:

BZOJ 3326 传送门

Solution:

明显是一道数位$dp$的题目,就是递推式复杂了点

先要求出一个数$\bar{n}$向添加一位后的$\bar{np}$的转化关系

令$res[\bar{n}]$为数$n$的权值和,

则$res[\bar{np}]=res[\bar{n}]+\sum_{i=1}^{len(n)} \bar{n[i...len(n)]p}$

令$suf[\bar{n}]$为数$n$的后缀和,

则$res[\bar{np}]=res[\bar{n}]+suf[\bar{np}]$

同时$suf$自己的递推式为:$suf[\bar{np}]=base*suf[\bar{n}]+(len(n)+1)*p$

再令$dgt[\bar{n}]$为数$n$的位数,

则$dgt[\bar{np}]=dgt[\bar{n}]+1$

上面的递推式虽然都只针对某一个数$n$,但完全可以逐层推广到之前所有数的和

使原来的$res,suf,dgt$分别表示$\sum res,\sum suf,\sum dgt$,$a$表示数的个数

再用第二维的$0/1$表示是否达到上界,算是数位$dp$的常规套路

剩下的递归式还是看代码吧……

Code:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MAXN=1e5+,MOD=; int B,l1,l2,dat1[MAXN],dat2[MAXN];
ll pre[MAXN],res[MAXN][],a[MAXN][],suf[MAXN][],dgt[MAXN][]; ll solve(int *dat,int l)
{
memset(res,,sizeof(res));memset(dgt,,sizeof(dgt));
memset(a,,sizeof(a));memset(suf,,sizeof(suf)); a[l+][]=;
for(int i=l;i;i--)
{
int cur=(i==l)?:B; a[i][]=a[i+][];
a[i][]=((cur-)+a[i+][]*B+a[i+][]*dat[i])%MOD;
dgt[i][]=(dgt[i+][]+a[i+][])%MOD;
dgt[i][]=((cur-)+(dgt[i+][]+a[i+][])*B%MOD+(dgt[i+][]+a[i+][])*dat[i]%MOD)%MOD;
suf[i][]=(suf[i+][]*B+dgt[i][]*dat[i])%MOD;
suf[i][]=(pre[cur]+(suf[i+][]*B%MOD*B%MOD+(dgt[i+][]+a[i+][])*pre[B]%MOD)+
(suf[i+][]*B*dat[i]%MOD+dgt[i][]*pre[dat[i]]%MOD))%MOD;
res[i][]=(res[i+][]+suf[i][])%MOD;
res[i][]=(res[i+][]*dat[i]%MOD+res[i+][]*B%MOD+suf[i][])%MOD;
}
return (res[][]+res[][])%MOD;
} int main()
{
scanf("%d",&B);
for(int i=;i<=B;i++) pre[i]=(pre[i-]+i-)%MOD; scanf("%d",&l1);
for(int i=l1;i>=;i--) scanf("%d",&dat1[i]);
scanf("%d",&l2);
for(int i=l2;i>=;i--) scanf("%d",&dat2[i]); for(int i=;i<=l1;i++)
if(dat1[i]){dat1[i]--;break;}
else dat1[i]=B-;
if(!dat1[l1]) l1--; printf("%lld",(solve(dat2,l2)-solve(dat1,l1)+MOD)%MOD);
return ;
}

[BZOJ 3326] 数数的更多相关文章

  1. BZOJ 3326 [SCOI2013]数数 (数位DP)

    洛谷传送门 题目: Fish 是一条生活在海里的鱼,有一天他很无聊,就开始数数玩.他数数玩的具体规则是: 确定数数的进制$B$ 确定一个数数的区间$[L, R]$ 对于$[L, R] $间的每一个数, ...

  2. BZOJ 3326: [Scoi2013]数数

    数位DP,然而式子真的复杂 #include<cstdio> #include<algorithm> #include<cstring> using namespa ...

  3. 【BZOJ 3326】[Scoi2013]数数

    题目描述 Fish 是一条生活在海里的鱼,有一天他很无聊,就开始数数玩.他数数玩的具体规则是: 确定数数的进制B 确定一个数数的区间[L, R] 对于[L, R] 间的每一个数,把该数视为一个字符串, ...

  4. 【BZOJ】【3530】【SDOI2014】数数

    AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...

  5. BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]

    3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...

  6. bzoj [Sdoi2014]数数 AC自动机上dp

    [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1264  Solved: 636[Submit][Status][Discu ...

  7. bzoj 3530: [Sdoi2014]数数 数位dp

    题目 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数. ...

  8. 【BZOJ3530】数数(AC自动机,动态规划)

    [BZOJ3530]数数(AC自动机,动态规划) 题面 BZOJ 题解 很套路的\(AC\)自动机+\(DP\) 首先,如果长度小于\(N\) 就不存在任何限制 直接大力\(DP\) 然后强制限制不能 ...

  9. BZOJ3530: [Sdoi2014]数数

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 322  Solved: 188[Submit][Status] ...

随机推荐

  1. 【洛谷 P4568】 [JLOI2011]飞行路线 (分层最短路)

    题目链接 分层图最短路. 把每个点拆成\(k+1\)个点,表示总共有\(k+1\)层. 然后每层正常连边, 若\((u,v)\)有边,则把每一层的\(u\)和下一层的\(v\).每一层的\(v\)和下 ...

  2. MSSQL 构建临时表SQL

    declare @StartQuarter int declare @StartYear int declare @EndQuarter int declare @EndYear int declar ...

  3. 20151024_002_C#基础知识(ArrayList,Hashtable,List,Dictionary)

    1:ArrayList 和 Hashtable(哈希表) 1.1:ArrayList ArrayList list = new ArrayList(); list.Add(); list.AddRan ...

  4. 首行缩进css

    html首行缩进2字符,可以使用CSS属性中的[text-indent]进行设置. 设置代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  5. bzoj 2786 DP

    我们可以将=左右的两个数看成一个块,块内无顺序要求,把<分隔的看成两个块,那么我们设w[i][j]代表将i个元素分成j个块的方案数,那么显然w[i][j]=w[i-1][j]*j+w[i-1][ ...

  6. 【HNOI】 攻城略池 tree-dp

    [题目大意] 给定一棵树,边有边权,每个节点有一些兵,现在叶子节点在0时刻被占领,并且任意节点在x被占领,那么从x+1开始,每单位时间产生一个兵,兵会顺着父亲节点一直走到根(1),其中每经过一个节点, ...

  7. spring-retry 重试机制

    业务场景 应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果:第二步拿 ...

  8. javascript性能

    1.js文件放在底部 js文件具有阻塞机制,放在头部,需要等待js下载解析完毕之后才能下载渲染页面,因此需要放在底部

  9. k8s取节点内docker中的日志

    Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大 ...

  10. JS中的日期内置函数

    用JS中的日期内置函数实现在页面显示:“今天是:2013年9月26日14:32:45”. var date=new Date(Date.parse('9/26/2013 14:32:45'));   ...