题目链接:http://codeforces.com/contest/611/problem/B
题意:给定区间[l,r]问里面有几个数二进制里只有一个0。
按数的位数搜索,如果有0出现了则只填1,最后就是结果。
1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert> 9 #include <cstdio> 10 #include <bitset> 11 #include <vector> 12 #include <deque> 13 #include <queue> 14 #include <stack> 15 #include <ctime> 16 #include <set> 17 #include <map> 18 #include <cmath> 19 20 using namespace std; 21 #define fr first 22 #define sc second 23 #define cl clear 24 #define BUG puts("here!!!") 25 #define W(a) while(a--) 26 #define pb(a) push_back(a) 27 #define Rint(a) scanf("%d", &a) 28 #define Rll(a) scanf("%I64d", &a) 29 #define Rs(a) scanf("%s", a) 30 #define Cin(a) cin >> a 31 #define FRead() freopen("in", "r", stdin) 32 #define FWrite() freopen("out", "w", stdout) 33 #define Rep(i, len) for(int i = 0; i < (len); i++) 34 #define For(i, a, len) for(int i = (a); i < (len); i++) 35 #define Cls(a) memset((a), 0, sizeof(a)) 36 #define Clr(a, p) memset((a), (p), sizeof(a)) 37 #define Full(a) memset((a), 0x7f7f7f, sizeof(a)) 38 #define lrt rt << 1 39 #define rrt rt << 1 | 1 40 #define pi 3.14159265359 41 #define RT return 42 #define lowbit(p) p & (-p) 43 #define onenum(p) __builtin_popcount(p) 44 typedef long long LL; 45 typedef long double LD; 46 typedef unsigned long long ULL; 47 typedef pair<int, int> pii; 48 typedef pair<string, int> psi; 49 typedef pair<LL, LL> pll; 50 typedef map<string, int> msi; 51 typedef vector<int> vi; 52 typedef vector<LL> vl; 53 typedef vector<vl> vvl; 54 typedef vector<bool> vb; 55 56 57 LL l, r; 58 LL ret1, ret2; 59 60 void dfs1(LL cur, bool flag) { 61 if(cur > l) return; 62 if(cur < l && flag == 1) { 63 ret1++; 64 } 65 if(!flag) { 66 dfs1(cur*2, 1); 67 } 68 dfs1(cur*2+1, flag); 69 } 70 71 void dfs2(LL cur, bool flag) { 72 if(cur > r) return; 73 if(cur <= r && flag == 1) { 74 ret2++; 75 } 76 if(!flag) { 77 dfs2(cur*2, 1); 78 } 79 dfs2(cur*2+1, flag); 80 } 81 82 int main() { 83 // FRead(); 84 while(cin >> l >> r) { 85 dfs1(1, 0); 86 dfs2(1, 0); 87 cout << ret2 - ret1 << endl; 88 } 89 RT 0; 90 }