• UESTC-1307-windy数


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

    Input

    包括两个整数。A B。
    满足 1 <= A <= B <= 2000000000 。

    Output

    包括一个整数:闭区间[A,B]上windy数的个数。

    Sample Input

    1 10

    Sample Output

    9


    状态分析比較简单。须要增加前导0的状态 如01 02 03



    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <queue>
    using namespace std;
    
    typedef long long ll;
    ll dp[20][10];
    vector<int> digit;
    
    int a,b;
    ll dfs(int pos,int statu,int done,int first){
        if(pos==-1) return 1;
        if(!done && ~dp[pos][statu]&&!first) return dp[pos][statu];
        ll res = 0;
        int end = done? digit[pos]:9;
        if(first){
            for(int i = 0; i <= end; i++)
                res += dfs(pos-1,i,done&&i==end,i==0);
        }
        else{
            for(int i = 0; i <= end; i++){
                if(abs(i-statu)>=2)
                    res += dfs(pos-1,i,done&&i==end,0);
            }
        }
        if(!done&&!first)   dp[pos][statu] = res;
        return res;
    }
    
    ll solve(int num){
        memset(dp,-1,sizeof dp);
        digit.clear();
        while(num){
            digit.push_back(num%10);
            num /= 10;
        }
        return dfs(digit.size()-1,0,1,1);
    }
    
    int main(){
        while(cin >> a >> b){
            cout<<solve(b)-solve(a-1)<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    Python基础09 面向对象的进一步拓展
    Python快速教程 (手册)
    Python基础03 序列
    Python基础04 运算
    Python基础08 面向对象的基本概念
    Python基础07 函数
    Python基础10 反过头来看看
    Python基础05 缩进和选择
    Python进阶02 文本文件的输入输出
    Python进阶01 词典
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6770222.html
Copyright © 2020-2023  润新知