题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5327
打表预处理数据范围内所有的符合条件的数再查询即可。
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <cmath> 7 #include <cctype> 8 #include <queue> 9 #include <map> 10 #include <set> 11 #include <stack> 12 #include <list> 13 #include <vector> 14 15 using namespace std; 16 17 const int maxn = 100010; 18 int a, b; 19 int num[maxn]; 20 int vis[10]; 21 22 void init() { 23 memset(num, 0, sizeof(num)); 24 int tmp, flag; 25 num[0] = 0; 26 for(int i = 1; i < maxn; i++) { 27 memset(vis, 0, sizeof(vis)); 28 flag = 0; 29 num[i] = num[i-1]; 30 int k = i; 31 while(k) { 32 tmp = k % 10; 33 if(!vis[tmp]) { 34 vis[tmp] = 1; 35 } 36 else { 37 flag = 1; 38 break; 39 } 40 k /= 10; 41 } 42 if(!flag) { 43 num[i]++; 44 } 45 } 46 } 47 int main() { 48 // freopen("in", "r", stdin); 49 int T; 50 init(); 51 scanf("%d", &T); 52 while(T--) { 53 scanf("%d %d", &a, &b); 54 printf("%d ", num[b] - num[a-1]); 55 } 56 }