2024杭电多校1——1008位运算

Problem Description

小丁最近对位运算很感兴趣,通过学习,他知道了按位与 ⊗,按位异或 ⊕,以及按位或 ⊖ 三种常见位运算。

按位与 ⊗:二进制下每一位做与,即 0⊗0=0,0⊗1=0,1⊗0=0,1⊗1=1。

按位异或 ⊕:二进制下每一位做异或,即 0⊕0=0,0⊕1=1,1⊕0=1,1⊕1=0。

按位或 ⊖:二进制下每一位做或,即 0⊖0=0,0⊖1=1,1⊖0=1,1⊖1=1。

现在,对于一个在 [0,2^{k}) 中的整数 𝑛,小丁想要知道,有多少组也在 [0,2^{k}) 中的整数 𝑎,𝑏,𝑐,𝑑,满足:𝑎⊗𝑏⊕𝑐⊖𝑑=𝑛

注意,运算符是从左往右依次顺序结合的,即可以认为原表达式为:(((𝑎⊗𝑏)⊕𝑐)⊖𝑑)=𝑛

Input

本题单个测试点内包含多组测试数据。

第一行一个整数 𝑇(1≤𝑇≤10),表示数据组数。

对于每组数据,一行两个整数 𝑛,𝑘(1≤𝑘≤15,0≤𝑛<2^{k})。

Output

对于每组数据输出 𝑞 行,每行一个整数表示答案。

 核心代码
void solve()
{
    int t;
	cin >> t;
	while (t--) {
		int n, k, sum = 0;
		cin >> n >> k;
		sum = pow(4,k);
		int j = 0;
		rep(p, 0, 62) {
			if ((n >> p) & 1) j++;
		}
		sum *= pow(3,j);
		cout << sum << "\n";
}
图解

以n=1,k=2为例。无论n等于0还是1,a和b都可以任取[0,2^{k}),所以对于每一位来说,ab有4种组合;

(以下都为单个位数的讨论)

n=0时,d必须为0,(a&b^c)必须为0,故cd只有1种组合

n=1时,d=0,(a&b^c)必须为1;d=1,abc任取,故cd有3种组合

因此,abcd的数据组数为4^{k}*3^{cnt1},(cnt1为n中位数为1的个数)

相关推荐

  1. 题解|2024暑期01

    2024-07-21 19:36:01       20 阅读
  2. 题解|2023暑期03

    2024-07-21 19:36:01       19 阅读
  3. 第一场

    2024-07-21 19:36:01       15 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 19:36:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 19:36:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 19:36:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 19:36:01       55 阅读

热门阅读

  1. 计算机视觉发展历程

    2024-07-21 19:36:01       17 阅读
  2. python中的fire和Linux shell中的参数传递

    2024-07-21 19:36:01       14 阅读
  3. Vue.js 首屏加载优化:实战与策略

    2024-07-21 19:36:01       13 阅读
  4. 《浔川 AI 五子棋 v5.0 上线倒计时》——浔川官方

    2024-07-21 19:36:01       18 阅读
  5. @JsonFormat注解的作用

    2024-07-21 19:36:01       13 阅读
  6. 云原生项目纪事系列 - 项目管理的鲜活事例

    2024-07-21 19:36:01       20 阅读