NC229803. zzq和他的位运算
描述
输入描述
第一行给出一个整数 ,表示询问了 次。
接下来 行,每行两个整数 。
输出描述
输出 行,每行一个整数,第 行的整数代表第 次询问的答案。
示例1
输入:
1 1 1
输出:
1
C++(g++ 7.5.0) 解法, 执行用时: 334ms, 内存消耗: 2060K, 提交时间: 2022-10-26 15:55:50
#include<bits/stdc++.h> typedef long long LL; using namespace std; int fun(LL T) { LL x=T; int k=0; while(x) { if(x%2) k++; x/=2; } return k%2; } int main() { int Q; cin>>Q; while(Q--) { LL L,R; int l=0,r=0; cin>>L>>R; if(L%2==1) { l=fun(L); L++; } if(R%2==0) { r=fun(R); R--; } cout<<l+(R-L+1)/2+r<<endl; } return 0; }
C++ 解法, 执行用时: 322ms, 内存消耗: 2144K, 提交时间: 2021-11-22 14:05:03
#include <bits/stdc++.h> using namespace std; typedef long long ll; bool pt(ll x){ ll cn=0; while(x){ if(x%2)cn++; x/=2; } if(cn%2)return true; else return false; } int main(){ int t; cin>>t; while(t--){ ll l,r; int f=0; cin>>l>>r; if(pt(l))f++; while(!pt(l))l--; while(!pt(r))r--; ll a=l&1? (l+1)/2: l/2+1; ll b=r&1? (r+1)/2 : r/2+1; cout<<b-a+f<<endl; } }
Python3 解法, 执行用时: 1177ms, 内存消耗: 8108K, 提交时间: 2021-11-21 18:11:13
n = int(input()) def lqq(x): t = 0 while x: if x & 1: t += 1 x >>= 1 return t def cmy(x): sum = 0 if x & 1 or lqq(x) & 1: return x // 2 + 1 else : return x //2 while n: n -= 1 a, b = map(int, input().split()) print(cmy(b) - cmy(a - 1))