题意:beautiful数字定义为该数字中的十进制形式每一位都不同,给一个区间[L,R],求该区间中有多少个beautiful数字。
思路:数字不大,直接暴力预处理,再统计区间[1,i]有多少个,用cnt[R]-cnt[L-1]即可。
#include <bits/stdc++.h>
#define INF 0x7f7f7f7f
#define pii pair<int,int>
#define LL long long
using namespace std;
const int N=;
int has[];
int cnt[N]; void init()
{
for(int i=; i<N; i++)
{
memset(has,,sizeof(has));
int big=i;
while(big)//逐个拆出来
{
has[big%]++;
big/=;
}
int j=;
for(; j<; j++)
if(has[j]>) break;
if(j==) cnt[i]=;
}
for(int i=; i<N; i++)//统计i之前有多少个beautiful
cnt[i]+=cnt[i-];
} int main()
{
//freopen("input.txt", "r", stdin);
init();
int t, a, b;
cin>>t;
while(t--)
{
scanf("%d%d",&a,&b);
printf("%d\n",cnt[b]-cnt[a-]);
}
return ;
}
AC代码