救救我,windy数的代码微改全WA!
  • 板块P2106 Sam数
  • 楼主JackyBayer
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/5/5 13:37
  • 上次更新2023/10/23 16:37:02
查看原帖
救救我,windy数的代码微改全WA!
559350
JackyBayer楼主2023/5/5 13:37

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,p,q,dp[15][15],a[15];
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]; 
			}
		}
	}
}
int work(int x){
	memset(a,0,sizeof(a));
	int 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[i][j]%1000000007;
		} 
	}
	for(int i=1;i<a[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[i][j]%1000000007;
		} 
		if(abs(a[i+1]-a[i])>2)break;
    }
	return ans%1000000007;
}
signed main(){
	init();
	cin>>n;
	p=(int)pow(10,n-1)%1000000007;
	q=p*10-1%1000000007;
	cout<<(work(q+1)%1000000007-work(p)%1000000007)%1000000007<<endl;
	return 0;
}

2023/5/5 13:37
加载中...