wa on #29求助
查看原帖
wa on #29求助
305854
Drind楼主2023/10/6 08:05

rt 很奇怪的就寄在了第 29 个点

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
const int p=1e9+7;

int m,d;

int dp[2100][2100];
int a[2100],cnt;

int dfs(int len,int st,bool lim){
	if(!len) return st%m==0;
	if(!lim&&dp[len][st]!=-1) return dp[len][st];
	int limit=lim?a[len]:9; int ans=0;
	for(int i=0;i<=limit;i++){
		if((cnt-len)%2==0) {if(i==d) continue;} else if(i!=d) continue;
		ans=(ans+dfs(len-1,(st*10%m+i)%m,lim&&(i==a[len])))%p;
	}
	if(!lim) dp[len][st]=ans;
	return ans;
}

int work(string x){
	cnt=0; memset(a,0,sizeof a);
	for(int i=x.size()-1;i>=0;i--) a[++cnt]=x[i]-'0';
	return dfs(cnt,0,1);
}

int check(string x){
	cnt=0;
	for(int i=x.size()-1;i>=0;i--) a[++cnt]=x[i]-'0';
	int ans=0;
	for(int i=cnt;i>=1;i--){
		if((cnt-i)%2==1&&a[i]!=d) return 0;
		ans=(ans*10%m+a[i])%m;
	}
	if(ans%m!=0) return 0;
	return 1;
}


void fake_main(){
	string l,r; cin>>m>>d>>l>>r;
	cout<<((work(r)-work(l)+check(l))%p+p)%p<<"\n";
}

signed main(){
	memset(dp,-1,sizeof dp);
	ios::sync_with_stdio(false);
	int t; t=1;
	while(t--) fake_main();
}
2023/10/6 08:05
加载中...