Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- #define rep(i,n) for(int i=0, _n=(n); i<_n; i++)
- const int M=16, mod=1e9+7;
- int goal, all, p10[M], a[1<<M][10], memo[20][1<<M];
- inline int f(int len, int flag) {
- if(all) return p10[len];
- if(!len) return (flag>>goal&1); // modify value
- if(memo[len][flag]+1) return memo[len][flag];
- int ans=0;
- rep(i,10) ans += f(len-1, a[flag][i]); // modify 'sum'
- return memo[len][flag] = ans;
- }
- inline int tot(int n, int x) {
- if(!n) return 0;
- all = 0;
- goal = x;
- memset(memo, -1, sizeof memo);
- int d[20], len=0;
- while(n) d[len++] = n%10, n/=10;
- int ans=0, flag=0;
- for(int i=len; i--; ) {
- if(flag>>goal&1) all=1;
- rep(j,d[i]) ans += f(i, a[flag][j]);
- flag = a[flag][d[i]];
- }
- return x*ans%mod;
- }
- #undef int
- int main() {
- #define int long long
- rep(flag,1<<M)rep(x,10) {
- int flag2 = (1<<x);
- rep(i,M) if(flag>>i&1) flag2 |= (1<<(i^x));
- a[flag][x] = flag2;
- }
- rep(i,M) p10[i]=(i?p10[i-1]*10:1);
- int q; cin >> q;
- while(q--) {
- int l, r; cin >> l >> r;
- int ans=0;
- rep(i,M) ans += tot(r+1,i)-tot(l,i)+mod;
- cout << ans%mod << '\n';
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment