HDU-5878-I Count Two Three-预处理+二分

来源:互联网 发布:java后端工程师 编辑:程序博客网 时间:2024/05/22 03:47

题目链接

题意就是给定一个n,求不小于n的一个只有2,3,5,7为因子构成的数(包括1)

思路预处理出所有的满足的数,然后二分一下就好了。

#include<bits/stdc++.h>#define maxn 1000000000using namespace std;int x[5]={1,2,3,5,7};int x2[5]={1,30,19,13,11};long long a[5555];int tt=0;void dfs(int pos,long long ans) {    if(pos==5) {        a[++tt]=ans;        return;    }    for(int i=0;i<=x2[pos];i++) {        if(i!=0)        ans*=x[pos];        if(ans>maxn) {            break;        }        dfs(pos+1,ans);    }}int main(){    dfs(1,1);    long long n;    sort(a+1,a+tt+1);    int t;    scanf("%d",&t);    while(t--) {        scanf("%lld",&n);        int head=1,wei=tt;        while(head<wei) {            int mid=(head+wei)/2;            if(a[mid]<n) {                head=mid+1;            }            else {                wei=mid;            }        }        printf("%lld\n",a[head]);    }    return 0;}
0 0
原创粉丝点击