列表

详情


NC219473. 计算几何

描述

由于小  追女孩子的时间不多了,于是这里只有简单版题意。

共有  组询问,每次给定  ,你需要求出在  中有多少个数在二进制下  的个数有奇数个。

例如  ,在二进制下有  个  ,那么如果  ,答案为  。

例如  ,在二进制下有  个  ,那么如果  ,答案为  。

输入描述

第一行一个整数  。

接下来  行,每行两个整数  。

输出描述

输出  行,每行  个整数代表答案。

示例1

输入:

1
3 4

输出:

1

说明:

 ,那么在  中只有  在二进制下有奇数个  。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 18ms, 内存消耗: 2832K, 提交时间: 2021-05-21 19:44:17

def cal(x):
    rtn = x // 2
    if x % 2 == 0:
        sm = 0
        while x:
            sm += x % 2
            x //= 2
        rtn += sm % 2
    else:
        rtn = (x + 1) // 2
    return rtn


if __name__ == '__main__':
    t = int(input())
    while t > 0:
        l, r = map(int, input().split())
        print(cal(r) - cal(l - 1))
        t -= 1

pypy3 解法, 执行用时: 47ms, 内存消耗: 18676K, 提交时间: 2021-05-22 11:17:45

def check(num):
    ans=2*(num//4)
    if num%4==0:
        ans+=1 if bin(num).count('1')%2 else 0
    elif num%4==1:
        ans+=1
    elif num%4==2:
        ans+=2 if bin(num).count('1')%2 else 1
    else:
        ans+=2
    return ans

T=int(input())
for i in range(T):
    l,r=input().split()
    l,r=int(l),int(r)
    print(check(r)-check(l-1))

C++ 解法, 执行用时: 4ms, 内存消耗: 456K, 提交时间: 2022-05-21 11:09:22

#include <bits/stdc++.h>
using namespace std;
long long f(long long x) {
	return (x >> 1) + ((x & 1) | (__builtin_popcount(x) & 1));
}
int main() {
	int T;
	cin >> T;
	while (T--) {
		long long a, b;
		cin >> a >> b;
		cout << f(b) - f(a - 1) << endl;
	}
}

上一题