wa on #23求助
查看原帖
wa on #23求助
566353
ShanLing楼主2024/7/19 10:44
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 1000000007

int n,m,d,a[2005],book[2005][2005];
char l[2005],r[2005];

int dfs(int x,int num,int p)
{
	if(x>n)
	{
		if(num)
			return 0;
		return 1;
	}
	
	if(!p && book[x][num]!=-1)
		return book[x][num];
	
	int to=9,cnt=0;
	if(p)
		to=a[x];
	
	if(x%2)
		for(int i=0;i<=to;i++)
		{
			if(i==d)
				continue;
			
			if(i==to && p)
				cnt+=dfs(x+1,(num*10%m+i)%m,1);
			else
				cnt+=dfs(x+1,(num*10%m+i)%m,0);
			
			cnt%=mod;
		}
		
	else if(to>=d)
	{
		if(d==to && p)
			cnt+=dfs(x+1,(num*10%m+d)%m,1);
		else
			cnt+=dfs(x+1,(num*10%m+d)%m,0);
		
		cnt%=mod;
	}
	
	if(!p)
		book[x][num]=cnt;
	return cnt;
}

signed main( void )
{
	scanf("%lld%lld%s%s",&m,&d,l+1,r+1);
	n=strlen(l+1);
	for(int i=0;i<2005;i++)
		for(int j=0;j<2005;j++)
			book[i][j]=-1;
	
	for(int i=1;i<=n;i++)
		a[i]=l[i]-'0';
	int numl=dfs(1,0,1);
	
	int ck=1,cnt=0;
	for(int i=1;i<=n;i++)
	{
		cnt+=a[i];
		cnt%=m;
		if(i%2==0 && a[i]!=d)
			ck=0;
	}
	if(cnt)
		ck=0;
	
	for(int i=1;i<=n;i++)
		a[i]=r[i]-'0';
	int numr=dfs(1,0,1);

	cout<<(numr-numl+ck+mod)%mod;
	
	return 0;
}
2024/7/19 10:44
加载中...