10pts求调
查看原帖
10pts求调
995853
lwxxs楼主2024/3/3 21:41
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int N=12;
int l,r;
int f[N][N];
void init(){
    for(int i=0;i<=9;i++)f[1][i]=1;
    for(int i=2;i<N;i++)
        for(int j=0;j<=9;j++)
            for(int k=0;k<=9;k++){
                if(abs(j-k>=2)){
                    f[i][j]+=f[i-1][k];
                }
            }
}
int dp(int u){
    if(!u)return 0;
    while(u)nb.push_back(u%10),u/=10;
    vector<int> nb;
    int last=-2,res=0;
    for(int i=nb.size()-1;i>=0;i--){
        int x=nb[i];
        for(int j=0;j<x;j++){
            if(abs(j-last)>=2)
                res+=f[i+1][j];
        }
        if(abs(x-last)<2)break;
        last=x;
        if(!i)res++;
    }
    for(int i=1;i<=nb.size()-1;i++)
        for(int j=1;j<=9;j++)
            res+=f[i][j];
    return res;
}
int main(){
    cin>>l>>r;
    init();
cout<<dp(r)-dp(l-1);
    return 0;
}
2024/3/3 21:41
加载中...