Friday, 28 July 2017

Lightoj 1138 - Trailing Zeroes (III)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long unsigned
  4. ll zero(ll n){
  5.     ll dev = 5;
  6.     ll c = 0;
  7.     while(n>= dev){
  8.         c+= (n)/dev;
  9.         dev*=5;
  10.     }
  11.     return c;
  12. }
  13. void bisec(ll n){
  14.     ll start = 0, end  = 800000000, now, mid;
  15.     bool flag = false;
  16.     //cout<<"comes";
  17.     while(start<=end){
  18.         mid = (start+end)/2;
  19.         now = zero(mid);
  20.         //cout<<"start  mid  end now = "<<start<<" "<<mid<<" "<<end<<" "<<now<<endl;
  21.         if(now>n){
  22.             end = mid-1;
  23.         }
  24.         else if(now<n) start = mid+1;
  25.         else {flag = true;end = end-1;}
  26.     }
  27.     if(flag){printf("%llu\n", mid);return;}
  28.     else{printf("impossible\n");return;}
  29.     /*
  30.     if(zero(now) == n) {printf("%llu\n", now);return;}
  31.     for(ll p = start; p <= end; p++){
  32.         if(zero(p)<n) continue;
  33.         if(zero(p) == n) {printf("%llu\n", p);break;}
  34.         else {printf("impossible\n");break;}
  35.     }
  36.     return;
  37.     */
  38. }
  39. int main(){
  40.     int ts;
  41.     cin>>ts;
  42.     for(int i  = 1; i <=ts; i++){
  43.         ll a;
  44.         scanf("%llu"&a);
  45.         printf("Case %d: ", i);
  46.         bisec(a);
  47.     }
  48.     return 0;
  49. }

No comments:

Post a Comment

Most Featured Post

Lightoj 1159 - Batman

http://lightoj.com/volume_showproblem.php?problem=1159 problem analysis: First i thought of this as if s1, s2 and s3 are those three str...