标签:printf inpu open ora fine 格式 穷举 方便 nbsp
无
所谓H数,是指只含有2,3,5,7这些质因数的数,如630是H数,而22不是。现在要求输出第n个H数,为了方便起见将H[1]定为1。已知n不超过10000,最后数据在int64范围之内。
一个数n(如题目)
第n个H数
穷举会爆掉,要用生成法,最好加优化,不然空间复杂度比较大
12分、、(真的很崩溃、、)
#include<queue> #include<cmath> #include<cstdio> #include<vector> #include<cstring> #include<iostream> #include<algorithm> #define N 100000 #define LL long long using namespace std; int w[4]={2,3,5,7}; LL n,m,nx,sum,ans,a[N]; const long long int maxn=pow(2,64)-1; priority_queue<LL,vector<LL>,greater<LL> >q; LL read() { LL x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=read(),q.push(1); while(!q.empty()) { int x=q.top();q.pop(); if(x!=a[sum]) sum++,a[sum]=x; if(sum>=n) { ans=x; break; } for(int i=0;i<4;i++) { nx=x*w[i]; if(nx>maxn) break; q.push(nx); } } printf("%lld",ans); return 0; }
标签:printf inpu open ora fine 格式 穷举 方便 nbsp
原文地址:http://www.cnblogs.com/z360/p/7899885.html