通过位运算来解决一些算法题

本文介绍了如何运用位运算解决PAT的1073多选题常见计分法问题。通过位运算,如按位与、按位或、按位异或、按位取反和移位运算,可以高效地判断学生答题的正确性,包括全对、漏选和错选。具体方法包括:首先,通过异或运算判断是否满分;其次,通过或运算判断是否存在漏选或错选;最后,通过与运算确定错选的选项。位运算的巧妙运用简化了复杂的数据比较,提高了算法效率。

在刷pat的1073 多选题常见计分法题目时,发现如果需要判断每一个学生对应每道题的多选题是否错选,漏选,以及选对是比较麻烦的一件事,因为这涉及到两个集合的判断,判断一个集合是否是另一个集合的子集(即漏选,得一半的分),或者说两个集合是否完全相等(即题目得满分)。

刚开始通过set容器来保存每一道题的正确答案,以及学生选择的答案,然后比较两个集合的大小,大小一致则for循环判断每一个元素是否都存在。结果发现这种思路过于复杂,且易超时。

联想到每一个选项是否一致,可以通过异或运算判断两个集合,如果结果为0则得满分,否则就是错选或者漏选,错选漏选通过或运算来判断是否能够得到正确集合,如果可以则是漏选,如果不能则说明是错选。

在完整的实现这道题之前,先来学习一下位运算的基础。

1.常见的位运算

常见的位运算有6个,见如下表格:

Operators Meaning of operators
& Bitwise AND,按位与
| Bitwise OR,按位或
^ Bitwise XOR,按位异或
~ Bitwise complement,按位取反
<< Shift left,左移
>> Shift right,右移

1.1按位与

运算举例,对12和25进行按位操作:

12 = 00001100 (In Binary)
25 = 00011001 (In Binary)

Bit Operation of 12 and 25
  00001
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值