题目链接

终于过了,边界让我wa了好几次,猥琐的用AC代码对拍,很无奈,用非常麻烦的方法。写一下,估计以后再碰到,肯定看不懂这是写的什么了。

以前做过,统计1和2的,统计0比1和2麻烦多了,有前导0的情况,不太好弄。

算是用统计方法,先把sp[len-1]所有的加上,长度为len-1的情况。

然后就是长度为len的情况。从高位到低位,遍历。

如果此位是0,judge(str+1) + 1 + dfs(str+1),是统计当前为是0的,多少情况,但是会漏解,算是受以前那个题统计1和2的影响把。

如果下一位是0,那么就不用管了,交给下位统计去把。下位不是0,计算会漏掉下位是0的情况,所以定住下位是0,组合一下长度len-2的所有0的个数。

不是0的情况,类似。

以前那个题的题解http://www.cnblogs.com/naix-x/archive/2013/03/12/2955544.html

完全没有策略,乱写,乱搞过的。。。

 #include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
using namespace std;
#define LL __int64
LL dp[],sp[],o[];
LL judge(char *str)
{
int i,len;
LL ans;
len = strlen(str);
ans = ;
for(i = ; i <= len-; i ++)
{
ans = (ans* + str[i]-'');
}
return ans;
}
LL dfs(char *str)
{
int len;
LL sum;
len = strlen(str);
if(len == )
return ;
sum = (len-)*o[len-];
if(str[] == '')
{
if(str[] == '')
return judge(str+) + + dfs(str+);
else if(len >= )
return judge(str+) + +dfs(str+)+o[len-] + (len-)*o[len-];
else
return judge(str+) + + dfs(str+);
}
else
{
if(str[] == '')
return (str[]-'')*sum + dfs(str+);
else if(len >= )
return (str[]-'')*sum + dfs(str+)+o[len-] + (len-)*o[len-];
else
return (str[]-'')*sum + dfs(str+);
}
}
LL fun(LL x)
{
int i,len;
char str[];
if(x == ) return ;
else if(x < ) return ;
len = ;
while(x)
{
str[len++] = x%+'';
x = x/;
}
for(i = ; i < len/; i ++)
{
swap(str[i],str[len-i-]);
}
str[len] = '\0';
return sp[len-] + dfs(str);
}
int main()
{
int i;
LL temp = ,x,y;
dp[] = ;
sp[] = ;
o[] = ;
o[] = ;
for(i = ; i <= ; i ++)
{
dp[i] = (i-)**temp;
sp[i] = sp[i-] + dp[i];
o[i] = *o[i-];
temp = temp*;
}
while ( scanf("%I64d%I64d",&x,&y) && (y>=) )
{
printf("%I64d\n",fun(y)-fun(x-));
}
return ;
}

POJ 3286 How many 0's?(数位DP)的更多相关文章

  1. POJ 3286 How many 0's?(几多0?)

    POJ 3286 How many 0's?(几多0?) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] A Benedi ...

  2. POJ 3286 How many 0's(数位DP模板)

    题目链接:http://poj.org/problem?id=3286 题目大意: 输入n,m,求[n,m]的所有数字中,0出现的总数是多少,前导零不算. 解题思路: 模板题,设dp[pos][num ...

  3. TZOJ 2478 How many 0's?(数位DP)

    描述 A Benedict monk No.16 writes down the decimal representations of all natural numbers between and ...

  4. POJ 3286 How many 0's?

    题目链接 题意 :写下m到n之间所有的数,会写多少个0. 思路 :先算0到m的,再算0到n的,最后相减. 网上有位大神是这么推的,看下面.... 首先转化成求 [0, x] 中所有数中,含有的 0 的 ...

  5. POJ 3286 How many 0&#39;s?

    题目大意: 计算[m,n]之间全部数字有多少个零. 解题思路: 能够用[0,m)之间和[0,n]之间有多少个零然后作差. 规律是计算全部位置在到当前数时有多少个零. 以下是代码:   #include ...

  6. hdu_2089(数位dp)

    hdu_2089(数位dp) 标签: dp 我初次接触数位dp表面上看上去挺简单,但是仔细学还是要考虑很多细节的.wa了无数次,这里引入一个 很好地博客 #include<cstdio> ...

  7. 【hdu4507】吉哥系列故事——恨7不成妻 数位dp

    题目描述 求 $[L,R]$ 内满足:数位中不包含7.数位之和不是7的倍数.本身不是7的倍数 的所有数的平方和 mod $10^9+7$ . 输入 输入数据的第一行是case数T(1 <= T ...

  8. 数位DP 详解

    序 天堂在左,战士向右 引言 数位DP在竞赛中的出现几率极低,但是如果不会数位DP,一旦考到就只能暴力骗分. 以下是数位DP详解,涉及到的例题有: [HDU2089]不要62 [HDU3652]B-n ...

  9. [poj 3252]数位dp前导0的处理

    通过这个题对于数位dp中前导0的处理有了新的认识. 题目链接:http://poj.org/problem?id=3252 //http://poj.org/problem?id=3252 #incl ...

随机推荐

  1. LVM XFS增加硬盘分区容量(resize2fs: Bad magic number in super-block while)

    LVM XFS增加硬盘分区容量(resize2fs: Bad magic number -- :: 分类: Linux LVM XFS增加硬盘分区容量(resize2fs: Bad magic num ...

  2. Objective-C中的instancetype和id区别

    目录(?)[-] 有一个相同两个不同相同 Written by Mattt Thompson on Dec 10th 2012 一什么是instancetype 二关联返回类型related resu ...

  3. 经典的SQL面试题

    SQL中 inner join. left join .right join. outer join之间的区别 A表(a1,b1,c1) B表(a2,b2) a1 b1 c1 a2 b2 01 数学 ...

  4. 【SpringMVC】SpringMVC系列10之视图与视图解析器

    10.视图与视图解析器 10.1.概述     请求处理方法执行完成后,最终返回一个 ModelAndView处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象, ...

  5. velocity的string转数字,numberTool

    velocity的string转数字,非常有意思: 1.通过java的包装类进行转换 #set($intString = "20") #set($Integer = 0) $Int ...

  6. python 列表转为字典的两个小方法

    1.现在有两个列表,list1 = ['key1','key2','key3']和list2 = ['1','2','3'],把他们转为这样的字典:{'key1':'1','key2':'2','ke ...

  7. MPlayer-ww 增加边看边剪切功能+生成高质量GIF功能

    http://pan.baidu.com/s/1eQm5a74 下载FFmpeg palettegen paletteuse documentation 需要下载 FFmpeg2.6 以上 并FFmp ...

  8. Avisynth + DirectShow + WebCamera 实现Avisynth脚本访问摄像头

    准备工作:需要以下三种软件 1.Avisynth_258 安装文件和源码下载地址(Avisynth_258.exe 4.2 MB) http://sourceforge.net/projects/av ...

  9. codeforces 467C.George and Job 解题报告

    题目链接:http://codeforces.com/problemset/problem/467/C 题目意思:给出一条含有 n 个数的序列,需要从中找出 k 对,每对长度为 m 的子序列,使得 找 ...

  10. codeforces A. The Wall 解题报告

    题目链接:http://codeforces.com/problemset/problem/340/A 这道题目理解不难,就是在[a, b]区间内,找出同时能够被x和y整除的个数.第一次想当然的开了两 ...