CF1630A And Matching 题解

And Matching

传送门

You are given a set of n n n ( n n n is always a power of 2 2 2) elements containing all integers 0 , 1 , 2 , … , n − 1 0, 1, 2, \ldots, n-1 0,1,2,,n1 exactly once.

Find n 2 \frac{n}{2} 2n pairs of elements such that:

  • Each element in the set is in exactly one pair.
  • The sum over all pairs of the bitwise AND of its elements must be exactly equal to k k k. Formally, if a i a_i ai and b i b_i bi are the elements of the i i i-th pair, then the following must hold:
    Σ i = 1 n / 2 a i & b i = k , \Sigma_{i=1}^{n/2}{a_i \& b_i} = k, Σi=1n/2ai&bi=k,
    where & \& & denotes the bitwise AND operation.

If there are many solutions, print any of them, if there is no solution, print − 1 -1 1 instead.

Input

The input consists of multiple test cases. The first line contains a single integer t t t ( 1 ≤ t ≤ 400 1 \leq t \leq 400 1t400) — the number of test cases. Description of the test cases follows.

Each test case consists of a single line with two integers n n n and k k k ( 4 ≤ n ≤ 2 16 4 \leq n \leq 2^{16} 4n216, n n n is a power of 2 2 2, 0 ≤ k ≤ n − 1 0 \leq k \leq n-1 0kn1).

The sum of n n n over all test cases does not exceed 2 16 2^{16} 216. All test cases in each individual input will be pairwise different.

Output

For each test case, if there is no solution, print a single line with the integer − 1 -1 1.

Otherwise, print n 2 \frac{n}{2} 2n lines, the i i i-th of them must contain a i a_i ai and b i b_i bi, the elements in the i i i-th pair.

If there are many solutions, print any of them. Print the pairs and the elements in the pairs in any order.

Example #1

Input #1

4
4 0
4 1
4 2
4 3

Output #1

0 3
1 2
0 2
1 3
0 1
2 3
-1

Note

In the first test, ( 0 & 3 ) + ( 1 & 2 ) = 0 (0\&3)+(1\&2) = 0 (0&3)+(1&2)=0.

In the second test, ( 0 & 2 ) + ( 1 & 3 ) = 1 (0\&2)+(1\&3) = 1 (0&2)+(1&3)=1.

In the third test, ( 0 & 1 ) + ( 2 & 3 ) = 2 (0\&1)+(2\&3) = 2 (0&1)+(2&3)=2.

In the fourth test, there is no solution.

题目翻译

给你一个由 n n n n n n 总是 2 2 2 的幂次)元素组成的集合,其中包含所有整数 0 , 1 , 2 , … , n − 1 0, 1, 2, \ldots, n-1 0,1,2,,n1 恰好一次。

请找出 n 2 \frac{n}{2} 2n 对元素,使得:

  • 集合中的每个元素都正好在一对中。
  • 所有元素对的 bitwise AND之和必须恰好等于 k k k 。形式上,如果 a i a_i ai b i b_i bi i i i -th 对中的元素,那么下面的条件必须成立:
    Σ i = 1 n / 2 a i & b i = k , \Sigma_{i=1}^{n/2}{a_i \& b_i} = k, Σi=1n/2ai&bi=k,
    其中 & \& & 表示位操作 AND。

如果有多个解,则打印任意一个;如果没有解,则打印 − 1 -1 1

输入格式

输入由多个测试用例组成。第一行包含一个整数 t t t ( 1 ≤ t ≤ 400 1 \leq t \leq 400 1t400 ) - 测试用例的数量。测试用例说明如下。

每个测试用例由一行和两个整数 n n n k k k 4 ≤ n ≤ 2 16 4 \leq n \leq 2^{16} 4n216 n n n 2 2 2 0 ≤ k ≤ n − 1 0 \leq k \leq n-1 0kn1 的幂次)组成。

所有测试用例的 n n n 之和不超过 2 16 2^{16} 216 。每个输入项中的所有测试用例都是成对不同的

输出格式

对于每个测试用例,如果没有解决方案,则打印一行,其中包含整数 − 1 -1 1

否则,打印 n 2 \frac{n}{2} 2n 行,其中 i i i 行必须包含 a i a_i ai b i b_i bi ,即 i i i 对中的元素。

如果有多个解,则打印任意一个。按任意顺序打印解对和解对中的元素。

提示

在第一次测试中, ( 0 & 3 ) + ( 1 & 2 ) = 0 (0\&3)+(1\&2) = 0 (0&3)+(1&2)=0

在第二次测试中, ( 0 & 2 ) + ( 1 & 3 ) = 1 (0\&2)+(1\&3) = 1 (0&2)+(1&3)=1

第三次测试, ( 0 & 1 ) + ( 2 & 3 ) = 2 (0\&1)+(2\&3) = 2 (0&1)+(2&3)=2

在第四次测试中,无解。

以上来自 C o d e F o r c e s ,翻译: D e e p L 以上来自CodeForces,翻译:DeepL 以上来自CodeForces,翻译:DeepL

解题思路

解这题需要的重要性质:

  • 0 & k = 0 0\And k=0 0&k=0
  • k & ( n − 1 − k ) = 0 k\And (n−1−k)=0 k&(n1k)=0
  • ( n − 1 ) & k = k (n−1)\And k=k (n1)&k=k

其中 n = 2 x ( x ∈ Z ) n=2^x(x\in Z) n=2x(xZ)

依据以上性质进行讨论:

  • n = 4 n=4 n=4 k = 3 k=3 k=3 时,无解,输出 − 1 -1 1
  • k = 0 k=0 k=0:由性质 1 1 1 可知,可将 n n n 个数分成 ( 0 , n − 1 ) , ( 1 , n − 2 ) , … , ( n 2 − 1 , n 2 ) (0,n-1),(1,n-2),\dots ,(\frac{n}{2}-1,\frac{n}{2}) (0,n1),(1,n2),,(2n1,2n),这样每组按位与结果都是 0 0 0
  • 0 < k < n − 1 0<k<n−1 0<k<n1:将 k = 0 k=0 k=0 的情况进行调整,使其中一组按位与得到 k k k,且保持其它所有组按位与结果为 0 0 0
    由性质 3 3 3,可以让 k k k n − 1 n−1 n1 放在一组使按位与结果是 k k k。这时对于 k = 0 k=0 k=0 时情况的分组,相当于拆掉了 ( 0 , n − 1 ) , ( k , n − k − 1 ) (0,n−1),(k,n−k−1) (0,n1),(k,nk1) 两组。让 k k k n − 1 n−1 n1 放在一组,那么 0 0 0 n − k − 1 n−k−1 nk1 放在一起,根据性质 1 1 1,按位与结果正好是 0 0 0,其他保持不变。
  • k = n − 1 k=n−1 k=n1:按照情况 2 的方法,让 k k k n − 1 n−1 n1 放在一组,但当 k = n − 1 k=n−1 k=n1 时无效。这时考虑将 k k k 拆成 k − 1 k−1 k1 1 1 1 n − 1 n−1 n1 n − 2 n−2 n2 放在一组得到 k − 1 k−1 k1 1 1 1 和一个奇数放在一起得到 k − 1 k−1 k1,也就是 n − 2 n−2 n2
    依据情况 1 1 1 的分组方法,若 n − 1 n−1 n1 n − 2 n−2 n2 放在一组, 1 1 1 和一个奇数放在一起,则拆掉了 ( 0 , n − 1 ) , ( 1 , n − 2 ) (0,n−1),(1,n−2) (0,n1),(1,n2) 两组。选取一个奇数与 1 1 1 搭配,易想到用 n − 3 n−3 n3 来搭配,这时 0 0 0 2 2 2 搭配。故最终结果: ( 0 , 2 ) , ( 1 , n − 3 ) , ( n − 1 , n − 2 ) , ( 3 , n − 4 ) , … , ( n 2 − 1 , n 2 ) (0,2),(1,n-3),(n-1,n-2),(3,n-4),\dots ,(\frac{n}{2}-1,\frac{n}{2}) (0,2),(1,n3),(n1,n2),(3,n4),,(2n1,2n)

最后,将这四种情况分别用代码实现,就是AC代码了。

AC Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, k;
inline void solve();
inline void work() {int T;cin >> T;while (T--) {solve();}
}
signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);work();return 0;
}
inline void solve() {cin >> n >> k;if (n == 4 && k == 3) {cout << -1 << endl;return;}if (k == n - 1) {cout << n - 1 << " " << n - 2 << endl << 1 << " " << n - 3 << endl << 0 << " " << ((n - 3) ^ (n - 1)) << endl;for (int i = 3; i < n / 2; i++) {cout << i << " " << ((n - 1)^i) << endl;}} else {cout << n - 1 << " " << k << endl;if (k != 0) {cout << 0 << " " << ((n - 1)^k) << endl;}for (int i = 1; i < n / 2; i++) {if (i == k || i == ((n - 1)^k)) {continue;}cout << i << " " << ((n - 1)^i) << endl;}}
}//创作不易,你敢抄袭?!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝藏api推荐,热门、免费、好用

台风信息查询&#xff1a;提供西北太平洋及南海地区过去两年及当前年份所有编号台风的信息查询&#xff0c;包括台风实时位置、过去路径、预报路径及登陆信息等要素。短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可…

第08章_面向对象编程(高级)(static,单例设计模式,理解mian方法,代码块,final,抽象类与抽象方法,接口,内部类,枚举类,注解,包装类)

文章目录 第08章_面向对象编程(高级)本章专题与脉络1. 关键字&#xff1a;static1.1 类属性、类方法的设计思想1.2 static关键字1.3 静态变量1.3.1 语法格式1.3.2 静态变量的特点1.3.3 举例1.3.4 内存解析 1.4 静态方法1.4.1 语法格式1.4.2 静态方法的特点1.4.3 举例 1.5 练习 …

UI设计中的插画运用优势(下)

6. 插画赋予设计以美学价值&#xff0c;更容易被接受 即使所有人都在分析和争论产品的可用性和易用性&#xff0c;大家在对美的追求上&#xff0c;始终保持着一致的态度。一个设计是否具备可取性&#xff0c;是否能够通过甲方、客户和实际用户&#xff0c;是每个设计人都需要面…

高频一体式读写器的应用及其原理

高频一体式读写器作为一款读写设备&#xff0c;将RFID读写模块和天线集于一体&#xff0c;通过天线与RFID标签进行无线通信&#xff0c;实现对标签的识别和内存数据的读出或写入操作。具备安全、准确、快速、扩展、兼容性强等特点&#xff0c;具备非接触识别、远距离识别、环境…

Laravel 10.x 里如何使用ffmpeg

原理上很简单&#xff0c;就是使用命令行去调用ffmpeg&#xff0c;然后分析一下输出是不是有错误。 安装 首先安装 symfony/process&#xff0c;主要用于包装一下&#xff0c;用来代替 exec, passthru, shell_exec and system 。 composer require symfony/process composer…

PowerShell install 一键部署grafana

grafana 前言 Grafana 是一款开源的数据可视化和监控仪表盘工具。它提供了丰富的数据查询、可视化和报警功能,可用于实时监控、数据分析和故障排除等领域。 通过 Grafana,您可以连接到各种不同的数据源,包括时序数据库(如 Prometheus、InfluxDB)和关系型数据库(如 MySQ…

linux性能优化-磁盘I_O优化

1.文件系统 1.1.文件系统的工作原理 文件系统是在磁盘的基础上&#xff0c;提供了一个用来管理文件的树状结构。 接下来我们就看看Linux 文件系统的工作原理。 1.1.1索引节点和目录项 在 Linux 中一切皆文件 ,文件系统,本身是对存储设备上的文件&#xff0c;进行组织管理的…

【Linux】—— 共享内存

本期我将要带大家学习的是有关进程间通信的另一种方式——共享内存。共享内存是一种用于进程间通信的高效机制&#xff0c;允许多个进程访问和操作同一块内存区域。 目录 &#xff08;一&#xff09;深刻理解共享内存 1.1 概念解释 1.2 共享内存原理 1.3 共享内存数据结构 …

基于SpringBoot的药品管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

2024年华为OD机试真题-最大坐标值-Python-OD统一考试(C卷)

题目描述: 小明在玩一个游戏,游戏规则如下: 在游戏开始前,小明站在坐标轴原点处(坐标值为0)。 给定一组指令和一个幸运数,每个指令都是一个整数,小明按照指定的要求前进或者后退指定的步数。前进代表朝坐标轴的正方向走,后退代表朝坐标轴的负方向走。 幸运数为一个整数…

【css技巧】css实现边框渐变

海鲸AI-ChatGPT4.0国内站点&#xff0c;支持设计稿转代码&#xff1a;https://www.atalk-ai.com 在CSS中实现边框渐变效果&#xff0c;你不能直接应用渐变到border属性上&#xff0c;因为CSS标准不支持这样的操作。但是&#xff0c;你可以使用一些技巧来模拟边框渐变的效果。以…

数据治理能解决AI疲劳问题吗?

这篇文章强调了AI疲劳开始的两个阶段&#xff0c;并介绍了数据质量报告等数据治理措施如何能够推动构建值得信赖和健壮的模型。 数据治理和AI疲劳听起来像是两个不同的概念&#xff0c;但两者之间有着内在的联系。为了更好地理解它&#xff0c;让我们从它们的定义开始。 数据治…

JS 将字符串‘10.3%‘ 经过运算加2转换为 ‘12.3%‘

文章目录 需求分析 需求 已知 字符串 a ‘10.3%’&#xff0c;现需将转换为 字符串’12.3%’ 分析 去掉百分号&#xff0c;将字符串转换为数字 const aNumber parseFloat(10.3%); const resultNumber aNumber 2;将结果转换为带百分号的字符串 const resultString re…

【算法题】67. 二进制求和

题目 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a "11", b "1" 输出&#xff1a;"100" 示例 2&#xff1a; 输入&#xff1a;a "1010", b "1011" 输出…

【OpenCV】P1 开发环境搭建

目录 OpenCV 简介OpenCV 安装*Windows* 下载安装*Macos* 下载安装*Ubuntu* 下载安装 OpenCV is the word’s biggest computer vision library. It’s open source, contains over 2500 algorithms and is operated by the non-profit Open Source Vision Foundation. – From …

灰度图像的自动阈值分割

第一种&#xff1a;Otsu &#xff08;大津法&#xff09; 一、基于cv2的API调用 1、代码实现 直接给出相关代码&#xff1a; import cv2 import matplotlib.pylab as pltpath r"D:\Desktop\00aa\1.png" img cv2.imread(path, 0)def main2():ret, thresh1 cv2.…

springboot项目之微信小程序授权登陆

引言 现实工作中小程序微信授权是最常见的需求&#xff0c;多少情况根据文档说明来基本上能够获取微信用户的openid。由于政策的改变&#xff0c;获取不到 微信头像和昵称&#xff0c;需要前端上传相关信息。 实战 简洁的两三行代码即可实现 PostMapping("wxMinReg"…

【CentOS】Linux 在线帮助文档命令:help、man 命令与文档汉化

目录 1、Linux 的命令行模式 2、help 命令 3、man 命令 4、man 命令输出文档汉化 注&#xff1a;本文档使用 Linux 版本为 CentOS 7.9 [swadianlocalhost ~]$ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) 1、Linux 的命令行模式 一般情况下&#xff0…

喜讯 | 华院计算摘得“2023大数据产业年度创新技术突破”奖

2024年1月17日&#xff0c; 由数据猿和上海大数据联盟主办&#xff0c;上海市经济和信息化委员会、上海市科学技术委员会指导的“第六届金猿季&魔方论坛——大数据产业发展论坛”在上海市四行仓库举行。论坛以“小趋势大未来”为主题&#xff0c;围绕大数据产业的各个领域展…

关于C# 使用 sqlite 映射实体类笔记

1、安装SQLite 在 nuget 搜索 System.Data.SQLite 安装2、在 app.conifg 文件中添加如下信息 <provider invariantName"System.Data.SQLite" type"System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />解决问题&#xff1a;…