Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define nl "\n"
- #define fi first
- #define se second
- #define pb push_back
- #define ll long long
- #define ull unsigned ll
- #define RV return void
- // #define inf 2000000000
- #define sz(x) int(x.size())
- #define all(v) v.begin(), v.end()
- #define rall(v) v.rbegin(), v.rend()
- #define Mini(x) *min_element(all(x))
- #define Maxi(x) *max_element(all(x))
- #define fixed(n) fixed << setprecision(n)
- #define ceil(w, m) (((w) / (m)) + ((w) % (m) ? 1 : 0))
- #define cin(v) for (auto&i:v) cin >> i;
- #define cout(v) for (auto&i:v) cout << i << " ";
- #define clr(memo, x) memset(memo, x, sizeof memo)
- #define updmin(a, b) a = min(a, b)
- #define updmax(a, b) a = max(a, b)
- #define vi vector < int >
- #define vl vector < ll >
- #define vc vector < char >
- #define vs vector < string >
- #define v2i vector < vector < int > >
- #define v2l vector < vector < int > >
- #define seti set < int >
- #define setl set < ll >
- #define mapii map < int , int >
- #define mapll map < ll , ll >
- #define mapli map < ll , int >
- #define mapci map < char , int >
- #define mapsi map < string , int >
- #define pll pair < ll , ll >
- #define pii pair < int , int >
- #define range(l,r,x) for(int i=l ; i < r ; i+=x)
- #define FastCode ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
- vector < string > ternary= {"NO\n" , "YES\n"};
- void Zainab(){
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- }
- /*================================ solution ================================ */
- const ll mod = 1e9+7;
- ll m , d;
- ll dp[2001][2001][2];
- ll rec(string & s , int idx , int cnt , bool flag){
- if(idx >= sz(s) ){
- // cout << cnt << " " << idx << nl;
- return !cnt;
- }
- ll & ret = dp[idx][cnt][flag];
- if(~ret)
- return ret;
- if(idx & 1 ){
- if(!flag and (d+'0') > s[idx] ){
- cout << "Here \n ";
- return 0;
- }
- return ret = rec(s , idx+1 , (cnt * 10 + d) % m , flag or (d+'0') < s[idx]);
- }
- ret =0;
- for(char c = '0' ; c <='9' ; c++){
- if((c-'0') == d) continue;
- if(!flag and c > s[idx]) continue;
- ret += rec(s , idx+1 , ( cnt * 10 + (c-'0') ) % m , flag or c < s[idx]);
- ret %= mod;
- }
- return ret ;
- }
- void myCode(){
- cin >> m >> d;
- string s1 , s2;
- cin >> s1 >> s2;
- clr(dp,-1);
- ll ans = rec(s2 , 0 , 0 , 0 );
- if(s1.back()=='0'){
- if(s1.front() == '1') {
- int cnt = sz(s1)-1;
- s1="";
- while(cnt--) s1+='9';
- }
- else{
- s1[sz(s1) - 2]--;
- s1.back()='9';
- }
- }
- else {
- s1.back() --;
- }
- // cout << s1 << nl;
- ans+=mod;
- ans%=mod;
- // cout << ans << nl;
- // cout << nl << nl;
- clr(dp,-1);
- ans-=rec(s1 , 0 , 0 , 0 );
- ans+=mod;
- ans%=mod;
- cout << ans << nl;
- }
- int main(){
- FastCode ;
- Zainab() ;
- int testCase=1;
- // cin >> testCase ;
- for(int i=1 ; i<= testCase ; i++){
- myCode();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement