Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- // #define mod 1000000007
- int mod=1e9+7;
- int m,d;
- int dp[2012][2][2012];//pos,tight,remainder
- int solve(string &s,int pos=0,int tight=1,int rem=0)
- {
- if(pos==s.size())
- {
- if(rem==0)
- return 1;
- return 0;
- }
- if(dp[pos][tight][rem]!=-1)
- return dp[pos][tight][rem];
- int ans=0;
- if(tight==1)
- {
- for(int i=0;i<=s[pos]-'0';i++)
- {
- if(pos%2==0 && i==d)
- continue;
- if(pos%2==1 && i!=d)
- continue;
- if(i==s[pos]-'0')
- ans=(ans+solve(s,pos+1,1,(rem*10+i)%m))%mod;
- else
- ans=(ans+solve(s,pos+1,0,(rem*10+i)%m))%mod;
- }
- dp[pos][tight][rem]=ans;
- }
- else if(tight==0)
- {
- for(int i=0;i<=9;i++)
- {
- if(pos%2==0 && i==d)
- continue;
- if(pos%2==1 && i!=d)
- continue;
- ans=(ans+solve(s,pos+1,0,(rem*10+i)%m))%mod;
- }
- dp[pos][tight][rem]=ans;
- }
- return ans;
- }
- void sol()
- {
- // int m,d;
- cin>>m>>d;
- int x,y;
- cin>>x>>y;
- x=x-1;
- string a=to_string(x);
- memset(dp,-1,sizeof(dp));
- int a_ans=solve(a);
- string b=to_string(y);
- memset(dp,-1,sizeof(dp));
- int b_ans=solve(b);
- cout<<b_ans-a_ans;
- }
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- #endif
- int t;
- t=1;
- while(t--)
- {
- sol();
- cout<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment