Friday, 28 July 2017

Lightoj 1042 - Secret Origins

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int cnt(long long n)
  5. {
  6.     int temp=0;
  7.     for(long long i=1; i<=n; i*=2)
  8.     {
  9.         if(& i)
  10.             temp++;
  11.     }
  12.     return temp;
  13. }
  14. /*
  15. void bin(int n){
  16.     int mask = 1;
  17.     for(int i = 31; i>= 0; i--){
  18.         mask = 1<<i;
  19.         if(mask&n) cout<<"1";
  20.         else cout<<"0";
  21.     }
  22.     cout<<endl;
  23. }
  24. */
  25. int main()
  26. {
  27.     int t,cases=0;
  28.     scanf("%d",&t);
  29.  
  30.     while(t--)
  31.     {
  32.         long long n,ans;
  33.         scanf("%lld",&n);
  34.         //bin(n);
  35.         for(long long i=0; i<32; i++){
  36.         int mask = 1<<i;
  37.             if(& mask){
  38.                
  39.                 //cout<<" ans, n, i = , "<<ans<<" "<<n<<" "<<i<<" "<<endl;
  40.                 ans=n+mask;
  41.                 //bin(ans);
  42.                 //cout<<" ans, n, i = , "<<ans<<" "<<n<<" "<<i<<" "<<endl;
  43.                 break;
  44.             }
  45.             }
  46.  
  47.         int diff=cnt(n)-cnt(ans);
  48.  
  49.         for(int i=0; i<diff; i++)
  50.             ans+=(1<<i);
  51.  
  52.         printf("Case %d: %lld\n",++cases,ans);
  53.     }
  54.     return 0;
  55. }

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...