https://vjudge.net/problem/UVA-1640

题意:统计区间[l,r]中0——9的出现次数

数位DP

注意删除前导0

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int ans[],a[],dp[][],bit[];
int dfs(int dep,int ty,bool lim,int k)
{
if(!dep) return ty;
if(!lim && dp[dep][ty]!=-) return dp[dep][ty];
int ans=,up= lim ? a[dep] : ;
for(int i=;i<=up;i++)
{
if(i==k) ans+=dfs(dep-,ty+,lim && i==up,k);
else ans+=dfs(dep-,ty,lim && i==up,k);
}
if(!lim) dp[dep][ty]=ans;
return ans;
}
int main()
{
int l,r;
bit[]=;
for(int i=;i<=;i++) bit[i]=bit[i-]*;
while(scanf("%d%d",&l,&r)!=EOF)
{
if(!l) return ;
if(l>r) swap(l,r);
memset(ans,,sizeof(ans));
a[]=;
while(r) a[++a[]]=r%,r/=;
for(int i=;i<=;i++)
{
memset(dp,-,sizeof(dp));
ans[i]=dfs(a[],,,i);
}
l--; if(!l) ans[]--;
int tmp=a[];
a[]=;
while(l) a[++a[]]=l%,l/=;
for(int i=;i<=;i++)
{
memset(dp,-,sizeof(dp));
ans[i]-=dfs(a[],,,i);
}
while(tmp!=a[]) ans[]-=bit[--tmp];
printf("%d",ans[]);
for(int i=;i<=;i++) printf(" %d",ans[i]);
printf("\n");
}
}

UVA 1640 The Counting Problem的更多相关文章

  1. UVA 1640 The Counting Problem UVA1640 求[a,b]或者[b,a]区间内0~9在里面各个数的数位上出现的总次数。

    /** 题目:UVA 1640 The Counting Problem UVA1640 链接:https://vjudge.net/problem/UVA-1640 题意:求[a,b]或者[b,a] ...

  2. UVa 1640 - The Counting Problem(数论)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. UVa 1640 The Counting Problem (数学,区间计数)

    题意:给定两个数m, n,求从 m 到 n 中0-9数字各出现了多少次. 析:看起来挺简单的,其实并不好做,因为有容易想乱了.主要思路应该是这样的,分区间计数,先从个位进行计,一步一步的计算过来.都从 ...

  4. UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)

    题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...

  5. UVA 1640 The Counting Problem(按位dp)

    题意:给你整数a.b,问你[a,b]间每个数字分解成单个数字后,0.1.2.3.4.5.6.7.8.9,分别有多少个 题解:首先找到[0,b]与[0,a-1]进行区间减法,接着就只是求[0,x] 对于 ...

  6. UVA - 1640 The Counting Problem (数位dp)

    题意:统计l-r中每种数字出现的次数 很明显的数位dp问题,虽然有更简洁的做法但某人已经习惯了数位dp的风格所以还是选择扬长避短吧(说白了就是菜啊) 从高位向低位走,设状态$(u,lim,ze)$表示 ...

  7. uva 11401 Triangle Counting

    // uva 11401 Triangle Counting // // 题目大意: // // 求n范围内,任意选三个不同的数,能组成三角形的个数 // // 解题方法: // // 我们设三角巷的 ...

  8. UVa 101 The Blocks Problem Vector基本操作

    UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...

  9. UVa 1225 Digit Counting --- 水题

    UVa 1225 题目大意:把前n(n<=10000)个整数顺次写在一起,12345678910111213...,数一数0-9各出现多少字 解题思路:用一个cnt数组记录0-9这10个数字出现 ...

随机推荐

  1. 【转载】图解Java常用数据结构(一)

    图解Java常用数据结构(一)  作者:大道方圆 原文:https://www.cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Jav ...

  2. 八:The YARN Timeline Server

    一.Overview 介绍     yarn timeline server用于存储和检查应用程序过去和现在的信息(比如job history server).有两个功能: 1.Persisting ...

  3. mysql数据库配置主从同步

    MySQL主从同步的作用 .可以作为一种备份机制,相当于热备份 .可以用来做读写分离,均衡数据库负载 MySQL主从同步的步骤 一.准备操作 .主从数据库版本一致,建议版本5.5以上 .主从数据库数据 ...

  4. 算法与数据结构3.3 calculator

    ★实验任务 小 V 发明了一个神奇的整数计算器: 给定一个合法的表达式,这个计算器能求出这个表达式的最终答案. 表达式可能包含: +:运算符,整数加法.如 1+1=2 -:运算符,整数减法.如 1-1 ...

  5. lintcode-143-排颜色 II

    143-排颜色 II 给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序. 注意事项 You are not ...

  6. C语言的世界

    大家好,我是一名大一的学生,我叫陈由钧,我来自计算机系,一开始选择这门专业的时候,是出于对计算机的热爱,我喜欢计算机,喜欢没事琢磨琢磨计算的各种程序,各种软件,所以我选择学习计算机这门专业,第一周我就 ...

  7. linux的几个发行网站

     Red Hat: http://www.redhat.com  Fedora: http://fedoraproject.org/  Mandriva: http://www.mandriva ...

  8. Maven pom 文件解释

    1 - 什么是构建? 我们都知道,写完代码之后需要进行编译和运行,以笔者自身为例,使用 Eclipse 写完代码,需要进行编译,再生成 war 包,以便部署到 Tomcat. 在编写 Java 代码的 ...

  9. springBoot定制内嵌的Tomcat

    此篇仅介绍配置方式,详细配置内容百度查阅 工程结构: 可以通过配置的方式设置参数,如下 application.properties #配置tomcat端口 # server.port= 8888 # ...

  10. HUAS 1480 虫洞(最短路)

    把每个点拆成两个点,分别表示黑洞和白洞,然后按题意模拟加边跑最短路即可. # include <cstdio> # include <cstring> # include &l ...