萌新求助,本地RE提交AC,什么原因?
查看原帖
萌新求助,本地RE提交AC,什么原因?
286448
Eason2009楼主2022/9/30 21:53

AC代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=50005,M=N*16+16,mod=1e9+7;
int vis[M];
pair<int,int>dp[M];
char L[N],R[N],now[N];
void read(char *s)
{
	scanf("%s",now);
	int len=strlen(now);
	for(int i=0;i<=N-5;i++)
	{
		s[i]='0';
	}
	for(int i=0;i<len;i++)
	{
		s[N-5-len+i+1]=now[i];
	}
	return;
}
bool invaild(bool on_L,bool on_R,int num,int x)
{
	if(on_L&&num<L[x]-'0') return 1;
	if(on_R&&num>R[x]-'0') return 1;
	return 0;
}
pair<int,int>dfs(int dep,bool on_L1,bool on_L2,bool on_R1,bool on_R2)
{
	if(dep>N-5)
	{
		return make_pair(1,0);
	}
	int tmp=dep*16+on_L1*8+on_L2*4+on_R1*2+on_R2;
	if(vis[tmp]) return dp[tmp];
	vis[tmp]=1;
	int cnt=0,sum=0;
	for(int i=0;i<=9;i++)
	{
		if(invaild(on_L1,on_R1,i,dep)) continue;
		for(int j=0;j<=9;j++)
		{
			if(invaild(on_L2,on_R2,j,dep)) continue;
			pair<int,int>to=dfs(dep+1,on_L1&&i==L[dep]-'0',on_L2&&j==L[dep]-'0',on_R1&&i==R[dep]-'0',on_R2&&j==R[dep]-'0');
			sum=(sum+abs(i-j)*to.first+to.second)%mod;
			cnt=(cnt+to.first)%mod;
		}
	}
	dp[tmp]=make_pair(cnt,sum);
	return dp[tmp];
}
signed main()
{
	read(L);
	read(R);
	pair<int,int>ans=dfs(0,1,1,1,1);
	cout<<ans.second;
	return 0;
}
2022/9/30 21:53
加载中...