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 ...
随机推荐
- PHP - 获取和设置include_path .
PHP - 获取和设置include_path 分类: PHP 2011-02-16 13:19 2818人阅读 评论(1) ...
- 【转】如何用 Chrome for Android 做远程遥控 debugging
http://blog.csdn.net/wuchengzhi82/article/details/22190435
- 在Xcode5和Android Studio添加工程间的依赖
正在编辑中,尚未完成 先看看ios的target是什么,请先参看http://www.cocoachina.com/bbs/read.php?tid-10884.html做个大概了解 这里有一篇文章, ...
- java类初始化优先级
父类静态变量.父类静态代码块.子类静态变量.子类静态代码块.父类非静态变量.父类非静态代码块.父类构造函数.子类非静态变量.子类非静态代码块.子类构造函数
- oracle 10g 学习之oracle管理(3)
怎样将预先写好的sql脚本执行? select * from employees;→107条记录 利用 Oracle 企业管理器连接数据库服务器 点击打开以下界面: 此时已经连接成功了 用 Oracl ...
- 完美搞定《DOCKER IN ACTION》第二章示例
起来!!!命令如下: 建立第一个web docker docker run --detach --name web nginx:latest 建立第二个web_test docker docker r ...
- Hierachy Viewer 使用 monitor命令
使用 Hierachy Viewer 可视化调试工具 Hierachy Viewer 能很方便地在开发者设计,调试和调整界面时,快速定位问题,解决问题,提高开发效率. Hierarchy Viewer ...
- C#学习笔记(三)——流程控制
一.布尔逻辑 1.与布尔有关的2元运算符 2.布尔运算符 PS:“&”与“&&“之类的区别 (1)”&“是按位运算,也就是说是将2个数都转换成2进制,然后逐个进行与操作 ...
- c# 作业1
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- VMware安装、配置CentOS
出处:http://www.cnblogs.com/jlily/ 1. 准备CentOS安装镜像文件 官网下载地址:http://www.centos.org/download/ 官方有三个版本:DV ...