zoukankan      html  css  js  c++  java
  • 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;
    }
    


  • 相关阅读:
    js实现快速排序(in-place)简述
    手把手原生js简单轮播图
    基于superagent 与 cheerio 的node简单爬虫
    浅谈HTTP事务的一个过程
    css小技巧
    DesignPatternPrinciple(设计模式原则)二
    DesignPatternPrinciple(设计模式原则)一
    Attribute(特性)与AOP
    Thread(线程)四
    Thread(线程)三
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6770222.html
Copyright © 2011-2022 走看看