[CF611B]New Year and Old Property(dfs)

题目链接: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 }    
原文地址:https://www.cnblogs.com/kirai/p/5854349.html