POJ 3286 How many 0's?(数位DP)
终于过了,边界让我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)的更多相关文章
- POJ 3286 How many 0's?(几多0?)
POJ 3286 How many 0's?(几多0?) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] A Benedi ...
- POJ 3286 How many 0's(数位DP模板)
题目链接:http://poj.org/problem?id=3286 题目大意: 输入n,m,求[n,m]的所有数字中,0出现的总数是多少,前导零不算. 解题思路: 模板题,设dp[pos][num ...
- TZOJ 2478 How many 0's?(数位DP)
描述 A Benedict monk No.16 writes down the decimal representations of all natural numbers between and ...
- POJ 3286 How many 0's?
题目链接 题意 :写下m到n之间所有的数,会写多少个0. 思路 :先算0到m的,再算0到n的,最后相减. 网上有位大神是这么推的,看下面.... 首先转化成求 [0, x] 中所有数中,含有的 0 的 ...
- POJ 3286 How many 0's?
题目大意: 计算[m,n]之间全部数字有多少个零. 解题思路: 能够用[0,m)之间和[0,n]之间有多少个零然后作差. 规律是计算全部位置在到当前数时有多少个零. 以下是代码: #include ...
- hdu_2089(数位dp)
hdu_2089(数位dp) 标签: dp 我初次接触数位dp表面上看上去挺简单,但是仔细学还是要考虑很多细节的.wa了无数次,这里引入一个 很好地博客 #include<cstdio> ...
- 【hdu4507】吉哥系列故事——恨7不成妻 数位dp
题目描述 求 $[L,R]$ 内满足:数位中不包含7.数位之和不是7的倍数.本身不是7的倍数 的所有数的平方和 mod $10^9+7$ . 输入 输入数据的第一行是case数T(1 <= T ...
- 数位DP 详解
序 天堂在左,战士向右 引言 数位DP在竞赛中的出现几率极低,但是如果不会数位DP,一旦考到就只能暴力骗分. 以下是数位DP详解,涉及到的例题有: [HDU2089]不要62 [HDU3652]B-n ...
- [poj 3252]数位dp前导0的处理
通过这个题对于数位dp中前导0的处理有了新的认识. 题目链接:http://poj.org/problem?id=3252 //http://poj.org/problem?id=3252 #incl ...
随机推荐
- 一张图说明该选用神马程式来serve你的django应用
- linux下cp目录时排除一个或者多个目录的方法
说明:/home目录里面有data目录,data目录里面有a.b.c.d.e五个目录,现在要把data目录里面除过e目录之外的所有目录拷贝到/bak目录中 系统运维 www.osyunwei.com ...
- 【OpenStack】OpenStack系列7之Nova详解
源码下载.安装 参考: https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/openstack ...
- 【Spring】Spring系列7之Spring整合MVC框架
7.Spring整合MVC框架 7.1.web环境中使用Spring 7.2.整合MVC框架 目标:使用Spring管理MVC的Action.Controller 最佳实践参考:http://www. ...
- Trailing Zeros
Write an algorithm which computes the number of trailing zeros in n factorial. Have you met this que ...
- Android drawable的自动缩放
今天在写程序时发现,一张图片被自动放大了,后来发现,这张图片放在了drawable-zh文件夹下,这个文件夹没有指定屏幕密度!于是将drawable-zh改为drawable-zh-nodpi,问题解 ...
- codeforces 489C.Given Length and Sum of Digits... 解题报告
题目链接:http://codeforces.com/problemset/problem/489/C 题目意思:给出 m 和 s,需要构造最大和最小的数.满足长度都为 m,每一位的数字之和等于 s. ...
- MVC自带的校验
一.添加控制器Home和Model数据 public class UserInfo { public int Id { get; set; } [Display(Name="用户名" ...
- Android之Activity框架
在安卓应用中,经常需要Activity中经常需要有大量相似的Activity类,这些类往往有相似的结构与功能,因此产生了大量重复代码,为此,以下提供一种方法有效的降低了代码冗余. 定义Activity ...
- 谈谈Objective-C的警告 (转)
原文地址:http://onevcat.com/2013/05/talk-about-warning/ 一个有节操的程序员会在乎自己的代码的警告,就像在乎饭碗边上有只死蟑螂那样. ——@onevcat ...