题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=114427#problem/D
代码:
#include<stdio.h>
#include<string.h>
int base[10000000];
int idx=0;
int init()
{
for(int i=1;i<10000000;i++)
{
int temp=i;
bool cas[20]={0};
while(temp)
{
if(cas[temp%10]==1)
break;
cas[temp%10]=1;
temp=temp/10;
}
if(temp==0)
{
base[idx++]=i;
}
}
}
int rfind(int x)
{
int l=0,r=idx-1;
while(l<=r)
{
int m=(l+r)/2;
if(base[m]<x)
l=m+1;
else
r=m-1;
}
return l;
}
int main()
{
init();
int n;
while(~scanf("%d",&n))
{
printf("%d\n",rfind(n));
}
}