zoukankan      html  css  js  c++  java
  • vjudge Trailing Zeroes (III) (二分答案 && 数论)

    嗯...

     

    题目链接:https://vjudge.net/contest/318956#problem/E

    这道题是二分答案+数论,但首先是数论,否则你不知如何二分...

    首先关于一个阶乘的结果最后会出现0(即10),肯定是由2 * 5所造成的,而对于正整数 N,在[0, N]范围内,质因子中含有 2 的总是会比质因子含有 5 的要多。所以,只要需要知道质因数含有 5 的数字有多少个,即可知道末尾连续出现 0 的个数有多少...

    然后我们进行二分答案,从1~5e8 + 5(一定要足够大!)进行二分,如果当前答案处理出来的5的个数正好等于a,那么它可能是答案,因为可能我们把较小的遗漏了,所以我们要继续二分,如果有比它小的,继续更新...

     

    AC代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 
     4 using namespace std;
     5 
     6 inline int check(int x){
     7     int ans = 0;
     8     while(x){
     9         ans += x / 5;
    10         x /= 5;
    11     }
    12     return ans;
    13 }//处理5的个数,即末尾0的个数 
    14 
    15 int main(){
    16     int t, m = 0;
    17     scanf("%d", &t);
    18     while(t--){
    19         int ans = 0, a;
    20         m++;
    21         scanf("%d", &a);
    22         int l = 1, r = 5e8 + 5;
    23         while(l <= r){
    24             int mid = (l + r) >> 1;
    25             int _mid = check(mid);
    26             if(_mid > a) r = mid - 1;
    27             else if(_mid < a) l = mid + 1;
    28             else if(_mid == a) {ans = mid; r = mid - 1;}//可能有答案遗漏 
    29         }
    30         if(ans) printf("Case %d: %d
    ", m, ans);
    31         else printf("Case %d: impossible
    ", m);
    32     }
    33     return 0;
    34 }
    AC代码
  • 相关阅读:
    spring boot自动配置
    servlet类与Spring Controller类的关系
    Junit中的setup和teardown方法
    dependency的scope
    mapper的namespace
    mybatis缓存
    Ehcache(05)——缓存的查询
    Ehcache(04)——设置缓存的大小
    Ehcache(03)——Ehcache中储存缓存的方式
    Ehcache(02)——ehcache.xml简介
  • 原文地址:https://www.cnblogs.com/New-ljx/p/11343051.html
Copyright © 2011-2022 走看看