LightOJ

来源:互联网 发布:社交网络人力资源 编辑:程序博客网 时间:2024/06/06 02:56

题意:求满足N!包含q个0的最小值

题解:因为N!里面2出现的频率比5多所以只要求出N!中可以拆出几个5即可最后二分n求解出n+1刚好大于等于Q即可


#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;int n;bool check(int mid){    int ans = 0;    while(mid){        mid/=5;        ans += mid;    }    return ans<n;}int main(){    int t;    scanf("%d",&t);    int ca = 1;    while(t--){        scanf("%d",&n);        int l = 1,r = 5e8;        while(l<r){            int mid = (l+r+1)/2;            if(check(mid))                l = mid;            else                r = mid-1;        }        int ans = ++l;        int num = 0;        while(l){            l/=5;            num+=l;        }        if(num==n)            printf("Case %d: %d\n",ca++,ans);        else            printf("Case %d: impossible\n",ca++);    }    return 0;}



原创粉丝点击