题解,但是有坑

taffy  •  6个月前


#include<bits/stdc++.h>
#define ll long long 
using namespace std;
ll l,r,dp[12][12],a[12];
void init(){
	for(int i=0;i<=9;i++) dp[1][i]=1;
	for(int i=2;i<=10;i++){
		for(int j=0;j<=9;j++){
			for(int k=0;k<=9;k++){
				if(abs(j-k)>=2) dp[i][j]+=dp[i-1][k];
			}
		}
	}
}
ll work(int x){
	ll len=0,ans=0;
	while(x) a[++len]=x%10,x/=10;
	for(int i=1;i<=len-1;i++){
		for(int j=1;j<=9;j++){
			ans+=dp[j][i];
		}
	}
	for(int i=1;i<len;i++){
		ans+=dp[len][i];
	}
	for(int i=len-1;i>=1;i--){
		for(int j=0;j<=a[i]-1;j++){
			if(abs(j-a[i+1])>=2) ans+=dp[j][i];
		}
		if(abs(a[i]-a[i+1])<2) break;
	}
	return ans;
}
int main(){
	cin>>l>>r;
	init();
	cout<<work(r+1)-work(l);
} 

评论:

逆天


原神  •  6个月前