萌新求助 ub
查看原帖
萌新求助 ub
376997
Harry27182SDream楼主2021/11/5 20:17

不加 O2 AC,加 O2 全 TLE,之前是当可以随便填时令pre==-2,会出现数组访问到负数下标,现在改成了pre==12为什么还是 ub

#include<bits/stdc++.h>
using namespace std;
int l,r,len,a[15],f[15][15];
int dfs(bool limit,bool lead,int pos,int pre) 
{
	if(pos==0)return 1;
	if(!limit&&!lead&&f[pos][pre])return f[pos][pre];
	int res=0;
	int up=limit?a[pos]:9;
	for(int i=0;i<=up;i++)
	{
		if(abs(pre-i)<2)continue;
		if(lead&&i==0)res+=dfs(limit&(i==a[pos]),lead&(i==0),pos-1,12);
		else res+=dfs(limit&(i==a[pos]),lead&(i==0),pos-1,i);
	}
	if(!limit&&!lead)f[pos][pre]=res;
	return res;
}
int ask(int k)
{
	len=0;
	while(k)
	{
		a[++len]=k%10;
		k/=10;
	}
	dfs(1,1,len,12);
}
int main()
{
	scanf("%d%d",&l,&r);
	printf("%d",ask(r)-ask(l-1)); 
	return 0;
}
2021/11/5 20:17
加载中...