1026: [SCOI2009]windy数

Description

windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?

100%的数据,满足 1 <= A <= B <= 2000000000

思路:和 不要62以及Bomb差不多一样,有一点需要注意就是在最高位为0时,这是次一位并不会出现1,这是一个“空白”,所以很遗憾的要首先把位数小于n的数分开计算。。这就导致了初始化表示的1位时每一个数字节是否符合,而并不是表示区间。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<time.h>
using namespace std;
int f[][];
void init()
{
for(int j = ;j <= ;j++) f[][j] = ;// 表示的有点反常~~
for(int i = ;i <= ;i++)
for(int j = ;j <= ;j++){
for(int k = ;k <= ;k++)
if(abs(j - k) > )
f[i][j] += f[i-][k];
}
}
int query(int a)
{
int d[] = {},tot = ;
while(a){
d[++tot] = a % ;
a /= ;
}
d[tot + ] = -;
int ans = ;
for(int i = ;i < tot;i++)
for(int j = ;j <= ;j++)
ans += f[i][j];
for(int i = tot;i > ;i--){
for(int j = ;j < d[i];j++){
if(i == tot && j == ) continue;//第tot位不为0;
if(abs(j - d[i+]) > )
ans += f[i][j];
}
if(abs(d[i] - d[i+]) < ) break;
}
return ans;
}
int main()
{
init();
int A,B;
while(scanf("%d%d",&A,&B) == ){
printf("%d\n",query(B+) - query(A));
}
return ;
}

【bzoj】1026: [SCOI2009]windy数的更多相关文章

  1. bzoj 1026 [SCOI2009]windy数 数位dp

    1026: [SCOI2009]windy数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  2. bzoj 1026 [SCOI2009]windy数(数位DP)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4550  Solved: 2039[Submit][Sta ...

  3. BZOJ 1026: [SCOI2009]windy数( dp )

    dp..dp(x, t) 表示共x位, 第x位为t有多少个windy数. 对答案差分, 我们只需统计1 ~ l-1和1 ~ r的windy数数量. 考虑如何计算[1, n]的答案 : 从最高位到最低位 ...

  4. bzoj 1026 [ SCOI2009 ] windy数 —— 数位DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 蛮简单的数位DP,预处理 f[i][j] 表示 i 位数,以 j 开头的 windy ...

  5. BZOJ 1026: [SCOI2009]windy数 【数位dp】

    Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...

  6. bzoj 1026: [SCOI2009]windy数 & 数位DP算法笔记

    数位DP入门题之一 也是我所做的第一道数位DP题目 (其实很久以前就遇到过 感觉实现太难没写) 数位DP题目貌似多半是问从L到R内有多少个数满足某些限制条件 只要出题人不刻意去卡多一个$log$什么的 ...

  7. BZOJ 1026: [SCOI2009]windy数

    题目 人生中的第一道数位dp,很有趣,虽然我很快推出了结构,但是过程却迟迟没有写出来,最后看别人的题解才恍然大悟 d[i][j]表示数位为i,最高位为j的方案数 DpInit非常简单,复杂度应该是O( ...

  8. bzoj 1026: [SCOI2009]windy数【数位dp】

    忘记limit不能记WA了一发-- 典型数位dp,变成work(r)-work(l-1),然后dfs的时候记录w当前位置,la上一个数选的什么,lm当前位是否有上限,ok当前位是否可以不考虑差大于等于 ...

  9. bzoj 1026 [SCOI2009]windy数——数位dp水题

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 迷恋上用dfs写数位dp了. #include<iostream> #in ...

  10. 数位DP BZOJ 1026 [SCOI2009]windy数

    题目链接 前面全是0的情况特判 #include <bits/stdc++.h> int dp[10][10]; int digit[10]; int DFS(int pos, int v ...

随机推荐

  1. java16 程序、进程、线程

    一.程序.进程.线程 .程序:程序就是我们编写的代码,也就是指令集,是一个静态概念. .进程:操作系统调度我们的程序,动态概念,一个程序就是一个进程.进程是程序的一次动态执行过程,占用特定的地址空间, ...

  2. orczhou----MYSQL

    https://yq.aliyun.com/users/1597777588650149?spm=5176.blog11192.yqblogcon1.2.5mdGQb

  3. JsonUtil对象与json互转

    OrderDto orderDto = JsonUtil.json2Object(json,     new TypeRef<OrderDto>() {     }); package c ...

  4. 深入Windows窗体原理及控件重绘技巧

    之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解,如果你有类似的疑惑希望 ...

  5. js 如何判断数据是数据还是对象

    如果用typeof测试,数组和对象都是显示的Object, 测试方式:var mycars=new Array();mycars[0]="Saab";mycars[1]=" ...

  6. 【转】【2015MIIC】迅雷CTO陈磊:互联网思维会害死很多传统企业

    MIIC2015大会的“跨界与重构”论坛上,迅雷CTO.网心科技CEO陈磊的演讲引起众多共鸣——独家揭秘“互联网大忽悠”,给这群人画了像,互联网大忽悠通常有五招: 第1招,画大饼,给你一个宏伟的目标: ...

  7. C#迭代语句

    1,do while语句 do语句重复执行语句或者语句块,直到指定的表达式为false为止.循环体如果为单个语句,可以不放在{}内,如果不是,那么必须放在{}内.如下面的代码 Codeint i=0; ...

  8. C# DataTable转List And List转DataTable

    // DataTable转List: IList<HousesEntity> Ilist = TableAndList.ConvertTo<HousesEntity>(dt); ...

  9. C#常用正则验证

    #region Protected Property protected Regex rLetters { get { return new Regex("[a-zA-Z]{1,}" ...

  10. CentOS 6.4安装OpenOffice

    终端依次输入: (1)sudo yum install openoffice.org-writer (2) sudo  yum install openoffice.org-calc (3) sudo ...