Search Bit Sum
below given code is for bit2 spoj or Search Bit Sum spoj
in the below given code __lg() gives the last bit position of number eg: 7- 111 so last bit position is 2 starting from zero .
and 1LLU << i it means that we are shifting 1 to left by i and then converting it to unsigned long long .
and while loop in main function is actually binary search prototype for searching the number k;
In function totalbit formula for calculating total bit sum i got it from here
In function totalbit formula for calculating total bit sum i got it from here
this was asked in amazon interview .
#include <stdio.h> #include <iostream> using namespace std; unsigned long long totalbit(unsigned long long n){ unsigned long long ans = 0; int x = 0; for(int i = __lg(n); i >= 0; --i) if(n & 1LLU << i) ans += ((1LLU << i) >> 1) * i + 1 + (1LLU << i) * x++; return ans; } int main(){ int t; unsigned long long n, l, u, m; scanf("%d",&t); while(t--) { scanf("%llu",&n); l = 0; u = n + 1; while(l != u) { m = (l + u ) / 2; if(totalbit(m) >= n) u = m; else l = m + 1; } if(totalbit(l) == n) printf("%llu\n",l); else printf("Does Not Exist.\n"); } }
No comments:
Post a Comment
Your comment is valuable to us