• 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;
    }
    


  • 相关阅读:
    cocos2d-x CSV文件读取 (Excel生成csv文件)
    cocos2d-x 中 xml 文件读取
    String 类的实现
    json 文件解析与应用
    设计模式 之 《简单工厂模式》
    C++ 0X 新特性实例(比较常用的) (转)
    CCSpriteBatchNode CCSpriteFrameCache
    LongAdder
    ConcurrentHashMap源码
    HashMap源码
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6770222.html
Copyright © 2020-2023  润新知