找规律。
0: 00000(偶数个)
1: 00001(奇数个)
2: 00010(奇数个)
3: 00011(偶数个)
4: 00100(奇数个)
5: 00101(偶数个)
6: 00110(偶数个)
7: 00111(奇数个)
8: 01000(奇数个)
9: 01001(偶数个)
10:01010(偶数个)
11:01011(奇数个)
每四个数里面都包含两个满足条件的。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int solve(int x){
int res = 0;
while(x){
if(x&1) res++;
x>>=1;
}
if(res&1)
return 1;
else
return 0;
}
signed main(){
std::ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t;
cin>>t;
while(t--){
int l, r;
cin>>l>>r;
if((r-l+1)<=4){
int ans = 0;
for(int i = l; i <= r; i++){
ans += solve(i);
}
cout<<ans<<endl;
continue;
}
int x = l/4*4+3;
int res = (r-x)/4;
if(res*4==r-x) res--;
res *= 2;
for(int i = l; i <= x; i++){
res += solve(i);
}
for(int i = r/4*4; i <= r; i++){
res += solve(i);
}
cout<<res<<endl;
}
return 0;
} 
京公网安备 11010502036488号