Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ll memo[2][2][101][11][11][11][11][11][2];
- string a, b;
- ll f(int minq, int maxq, int idx, int a1, int a2, int a3, int a4, int a5, int null)
- {
- if (idx == -1) return (a5 != 10);
- ll &ans = memo[minq][maxq][idx][a1][a2][a3][a4][a5][null];
- if (~ans) return ans;
- int l = (minq ? a[idx]-'0' : 0);
- int r = (maxq ? b[idx]-'0' : 9);
- ans = 0;
- for (int i = l; i <= r; i++)
- {
- if (i > a4) ans += f((minq && (l==i)), (maxq && (r==i)), idx-1, a1, a2, a3, a4, i, 0);
- else if (i > a3) ans += f((minq && (l==i)), (maxq && (r==i)), idx-1, a1, a2, a3, i, a5, 0);
- else if (i > a2) ans += f((minq && (l==i)), (maxq && (r==i)), idx-1, a1, a2, i, a4, a5, 0);
- else if (i > a1) ans += f((minq && (l==i)), (maxq && (r==i)), idx-1, a1, i, a3, a4, a5, 0);
- else if (i > 0 || !null) ans += f((minq && (l==i)), (maxq && (r==i)), idx-1, i, a2, a3, a4, a5, 0);
- else ans += f((minq && (l==i)), (maxq && (r==i)), idx-1, a1, a2, a3, a4, a5, 1);
- }
- return ans % MOD;
- }
- int main()
- {_
- cin >> a >> b;
- reverse(all(a));
- reverse(all(b));
- while (a.size() < b.size()) a.push_back('0');
- memset(memo, -1, sizeof(memo));
- cout << f(1, 1, b.size()-1, 10, 10, 10, 10, 10, 1) << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement