HDOJ 5327 Olympiad 【数字分解】
水题
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int T;
int a, b;
int beatifulNum[100005];
//int split[10];
int split2[10];
//bool isBeatifulNum(int num){ // 标程方法
// memset(split, 0, sizeof(split));
// int len = 0;
// while(num != 0){
// split[len++] = num % 10;
// num /= 10;
// }
// sort(split, split+len);
// for(int i = 0; i < len-1; i++){
// if(split[i] == split[i+1]) return false;
// }
// return true;
//}
bool isBeatifulNum2(int num){ // 法2
memset(split2, 0, sizeof(split2));
while(num){
split2[num%10]++;
num /= 10;
}
for(int i = 0; i < 10; i++){
if(split2[i] > 1) return false;
}
return true;
}
void Pre(){
beatifulNum[0] = 1;
for(int i = 1; i <= 100000; i++){
//beatifulNum[i] = beatifulNum[i-1] + isBeatifulNum(i);
beatifulNum[i] = beatifulNum[i-1] + isBeatifulNum2(i);
}
}
int main(){
Pre();
cin>>T;
while(T--){
cin>>a>>b;
cout<<(beatifulNum[b] - beatifulNum[a-1])<<endl;
}
return 0;
}