解析:
直接处理出前缀和,然后就可以用O(1)的复杂度,离线查询。
my code
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100005;
int sum[N];
bool vis[10];
bool judge(int num) {
memset(vis, false, sizeof(vis));
while(num) {
if(vis[num%10]) return false;
vis[num%10] = true;
num /= 10;
}
return true;
}
void init() {
sum[0] = 0;
for(int i = 0; i < N; i++) {
sum[i] = judge(i) + sum[i-1];
}
}
int query(int ql, int qr) {
return sum[qr] - sum[ql-1];
}
int main() {
init();
int T;
scanf("%d", &T);
int ql, qr;
while(T--) {
scanf("%d%d", &ql, &qr);
printf("%d\n", query(ql, qr));
}
return 0;
}