90分求助,走过路过不要错过!
查看原帖
90分求助,走过路过不要错过!
148552
我很低调楼主2020/8/8 17:21

90分:

#include<bits/stdc++.h>
#define ll register int
#define R register
#define mod 20070707
#define maxs 20070707

using namespace std;
int n,m;
int dp[15][15]={0};
int num[15]={0};
inline int work(ll x){
	ll ans=0;
	ll len=0,box=x;
	memset(num,0,sizeof num);
	while(box)num[++len]=box%10,box/=10;
	for(ll i=1;i<=len-1;i++)for(ll j=1;j<=9;j++)ans+=dp[i][j];
	for(ll j=1;j<=num[len]-1;j++)ans+=dp[len][j];
	for(ll i=len-1;i>=1;i--){
		for(ll j=0;j<=num[i]-1;j++){
			if(abs(num[i+1]-j)>=2)ans+=dp[i][j];
		}
		if(abs(num[i+1]-num[i])<2)break;
	}
	return ans;
}
int main(){//freopen(".in","r",stdin);freopen(".out","w",stdout);
	for(ll i=0;i<=9;i++)dp[1][i]=1;
	for(ll i=2;i<=10;i++)for(ll j=0;j<=9;j++)
		for(ll k=0;k<=9;k++)if(abs(j-k)>=2)dp[i][j]+=dp[i-1][k];
	scanf("%d%d",&n,&m);
	printf("%d",work(m)-work(n-1));//就是这里
	return 0;
}

按照模板写的,后来看了大佬的题解,发现只要把第三十一行的:

f(m)-f(n-1)改成f(m+1)-f(n)

就AC了。疑惑ing……

2020/8/8 17:21
加载中...