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 ...
随机推荐
- HDU3344(小广搜+小暴力
Kakuro Extension Extension Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- Linux MySQL差异备份技巧
MSSQL差异备份使用技巧 15 Apr 2013 所谓的差异备份,就是只备份最近一次备份之后到此次备份之前所增加的那一部分数据.打个比方我第N次备份后数据库存放的内容是ABCD,然后我第N+1次 备 ...
- android设置图片自适应控件大小
在XML文件的ImageView属性中加上:android:scaleType="fitXY"
- iOS 使用interface builder 创建太复杂的constrains时容易产生crash
今天写程序,遇到了crash,在界面初始化时不会有,想切换到别的tab页就报错了.主要内容如下: Cannot find an outgoing row head for incoming head ...
- 七维互联(www.7wei.com)
七维互联 http://www.7wei.com/ 黄云贵的Delphi http://www.cnblogs.com/huangygdelphi/articles/2232171.htm ...
- iOS设备通知中心精品推荐消息删除
如要彻底解决这个问题可以通过手机连接PC端91助手—功能大全—文件管理,进入/Library/MobileSubstrate/DynamicLibraries 文件夹,把AppSafety开头的文件都 ...
- OC内存管理(MRC)
首先说明一下几块存储区域: 栈区(局部变量.函数参数值) 堆区(对象.手动申请/释放内存) BSS区(未初始化的全局变量.未初始化的静态数据) 常量区(字符串常量以及初始化后的全局变量.初始化后的静态 ...
- commons-fileupload实现文件上传下载
commons-fileupload是Apache提供的一个实现文件上传下载的简单,有效途径,需要commons-io包的支持,本文是一个简单的示例 上传页面,注意设置响应头 <body> ...
- w
w --help -f 开启或关闭显示用户从何处登入系统. -h 不显示各栏位的标题信息列. -l 使用详细格式列表,此为预设值. -s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗 ...
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...