HDU 4151The Special Number(暴力+二分)

来源:互联网 发布:大数据修炼系统女主 编辑:程序博客网 时间:2024/06/09 23:16

首先枚举1 - 1000W的数字,把是special的数存在数组中,然后二分查找第一个大于n的数的位置.

#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1000000;int tb[maxn], n, idx;void init(){for(int i = 1; i <= 10000000; ++i){bool vis[20] = {0};int t = i;while(t){int tmp = t % 10;if(vis[tmp]){break;}vis[tmp] = 1;t /= 10;}if(t == 0){tb[idx++] = i;}}}int bSearch(int x){int l = 0, r = idx - 1;while(l <= r){int m = (l + r) >> 1;if(tb[m] < x){l = m + 1;}else{r = m -1;}}return l;}int main(){init();while(~scanf("%d", &n)){if(n <= 0 )printf("0\n");else printf("%d\n",bSearch(n));}return 0;}