首页 > 代码库 > hdu4151(二分)
hdu4151(二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4151
题意:找出比n小的没有重复数字的总个数,例如12以内11不符合,1~10都符合。
分析:直接利用lower_bound函数找出比n刚好大的位置再减一就是答案。这里a数组从0开始,所以不用减一。
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>#include <queue>#include <cstdlib>#include <vector>#include <set>#include <map>#define LL long long#define mod 1000000007#define inf 1<<30#define N 10000000using namespace std;int a[1000000],tot;int vis[10];void init(){ tot=0; for(int i=1;i<=N;i++) { int temp=i; memset(vis,0,sizeof(vis)); while(temp) { int t=temp%10; if(!vis[t])vis[t]=1; else break; temp/=10; } if(!temp)a[tot++]=i; }}int main(){ int n; init(); while(scanf("%d",&n)>0) { // printf("%d\n",lower_bound(a,a+tot,n)-a); int left=0,right=tot,ans=0; while(left<right) { int mid=left+(right-left)/2; if(a[mid]>=n) { right=mid; } else left=mid+1; } printf("%d\n",right); }}
hdu4151(二分)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。