【Dream Counting, 2006 Dec-数数的梦】数位dp
题意:给定两个数,问区间[A,B]中0~9分别出现了多少次。A,B<=10^18
题解:应该是最裸的数位dp吧。。一开始没有记忆化tle了TAT
我们可以求出区间[0,B]的,再减去区间[0,A]的。
用dfs实现,记录flag(填了的位是否和边界重合),zero(当前是否还在前缀0中)
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<ctime>
#include<queue>
using namespace std; typedef long long LL;
const int N=;
int c[N][N][][],d[N],sum[N];
LL bit[N],ret[N]; LL g(int now,int x,int flag,int zero)
{
if(c[now][x][flag][zero]!=-) return c[now][x][flag][zero];
if(x==) return ;
LL ans=;
if(flag)
{
for(int i=;i<d[x];i++)
{
ans+=g(now,x-,,zero & (i==));
if(i==now && !(i== && zero)) ans+=bit[x-];
}
ans+=g(now,x-,,zero && (d[x]==));
if(now==d[x] && !(now== && zero)) ans+=ret[x-];
}
else
{
for(int i=;i<=;i++)
{
ans+=g(now,x-,,zero & (i==));
if(i==now && !(i== && zero)) ans+=bit[x-];
}
}
// printf("now %d x %d flag %d zero %d = %d\n",now,x,flag,zero,ans);
c[now][x][flag][zero]=ans;
return ans;
} void solve(LL x,LL tmp)
{
memset(d,,sizeof(d));
memset(c,-,sizeof(c));
int l=;LL y=x;
while(y)
{
d[++l]=(int)(y%);
y/=;
}
for(int i=;i<=;i++) ret[i]=x%bit[i]+;
for(int i=;i<=;i++) sum[i]+=g(i,,,)*tmp;
} int main()
{
// freopen("a.in","r",stdin);
freopen("dream.in","r",stdin);
freopen("dream.out","w",stdout);
LL A,B;int x;
scanf("%lld%lld",&A,&B);
memset(sum,,sizeof(sum));
bit[]=;
for(int i=;i<=;i++) bit[i]=bit[i-]*;
solve(A-,-);
solve(B,);
for(int i=;i<=;i++) printf("%d ",sum[i]);
return ;
}
【Dream Counting, 2006 Dec-数数的梦】数位dp的更多相关文章
- BZOJ_3209_花神的数论题_组合数+数位DP
BZOJ_3209_花神的数论题_组合数+数位DP Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又 ...
- 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 682 Solved: 364 Description 我们称一 ...
- uva11361 特殊数的数量(数位dp)
题目传送门 题目大意:给你一个n-m的区间,问你这个闭区间内的特殊数有几个,特殊数的要求是 数的本身 和 各位数字之和 mod k 等于0. 思路:刚接触数位dp,看了网上的题解,说用dp[i][j ...
- [bzoj3530][Sdoi2014]数数_AC自动机_数位dp
数数 bzoj-3530 Sdoi-2014 题目大意:给你一个整数集合,求所有不超过n的正整数,是的它的十进制表示下不能再一段等于集合中的任意数. 注释:$1\le n \le 1200$,$1\l ...
- 【ECNU77】位与数对个数(数位DP)
点此看题面 大致题意: 求\(\sum_{x=0}^{a-1}\sum_{y=0}^{b-1}[(x\&y)<k]\). 数位\(DP\) 显然数位\(DP\)吧. 我们设\(f_{n, ...
- 【JZOJ3624】【SDOI2014】数数(count) AC自动机+数位dp
题面 100 容易想到使用AC自动机来处理禁忌子串的问题: 然后在自动机上数位dp,具体是: \(f_{i,j,0/1}\)表示填了\(i\)位,当前在自动机的第\(j\)个结点上,\(0\)表示当前 ...
- BZOJ3209 花神的数论题 【组合数学+数位DP+快速幂】*
BZOJ3209 花神的数论题 Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又来讲课了.课后照例有 ...
- P4317 花神的数论题 动态规划?数位DP
思路:数位$DP$ 提交:5次(其实之前A过,但是调了调当初的程序.本次是2次AC的) 题解: 我们分别求出$sum(x)=i$,对于一个$i$,有几个$x$,然后我们就可以快速幂解决. 至于求个数用 ...
- UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...
随机推荐
- c++ string需要注意的地方
There are multiple answers based on what you are doing with the string. 1) Using the string as an id ...
- bootstrap使用中遇到的坑
一.例如: <div class="form-group"> <label class="control-label col-lg-3"> ...
- ACM 第十五天
计算几何基础 练习题 C - Wasted Time Mr. Scrooge, a very busy man, decided to count the time he wastes on all ...
- iOS-tableView刷新指定行,组
/一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:]; [tableview reloadSections:inde ...
- ubuntu 16.04 安装jdk9错误
转自:https://askubuntu.com/questions/769467/can-not-install-openjdk-9-jdk-because-it-tries-to-overwrit ...
- Oracle基础 表分区
Oracle基础 表分区 一.表分区 (一)表分区的分类 1.范围分区(range) 2.散列分区(hash) 3.列表分区(list) 4.复合分区:范围-哈希(range-hash).范围-列表( ...
- [OS] 操作系统基本类型
·批处理系统:(用户脱机使用.成批处理.多道程序运行) 批处理系统,又名批处理操作系统.批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行.这种采用批量处理作业技术的操作系 ...
- BZOJ 1509 逃学的小孩(树的直径)
题意:从树上任找三点u,v,w.使得dis(u,v)+min(dis(u,w),dis(v,w))最大. 有一个结论u,v必是树上直径的两端点. 剩下的枚举w就行了. 具体不会证... # inclu ...
- 《转》HTTP 协议入门
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
- [WC2005]双面棋盘
description 洛谷 给出一个\(n\times n\)的黑白棋盘. \(m\)次操作,每次将一个格子进行颜色翻转,求每次操作后的黑白四连通块数. data range \[n\le 200, ...