一个小提醒
查看原帖
一个小提醒
376045
Mr_RoastFish楼主2024/10/4 23:15

如果你写的是递推且存在一个类似这样的找 windywindy 数的函数。

int solve(int x){
	int cnt=0,ans=0;
	while(x)	a[++cnt]=x%10,x/=10;
	for(int i=1;i<cnt;i++)
		for(int j=1;j<=9;j++)
			ans+=f[i][j];
	for(int j=1;j<a[cnt];j++)	ans+=f[cnt][j];
	for(int i=cnt-1;i>=1;i--){
		for(int j=0;j<a[i];j++)//(1)
			ans+=(j-a[i+1]>=2||j-a[i+1]<=-2)?f[i][j]:0;
		if(a[i+1]-a[i]<2&&a[i+1]-a[i]>-2)	break;
	}
	return ans;
}

注意(1)处的循环是不会跑到对应数位值上的,所以他求的是[1,x)左闭右开区间的 windywindy 数个数!

所以最后求答案是用 solve(b+1)slove(a)solve(b+1)-slove(a) 而非 solve(b)slove(a1)solve(b)-slove(a-1)!!!

2024/10/4 23:15
加载中...