【异或运算】codeforces 1153 B. Dima and a Bad XOR
前言
异或运算:是一种在二进制数系统中使用的逻辑运算。它的基本规则是对两个二进制位进行比较,如果这两个位不同,则结果为 \(1\);如果相同,则结果为 \(0\)。
异或运算的规则
- \(0\) XOR \(0\) = \(0\)
- \(0\) XOR \(1\) = \(1\)
- \(1\) XOR \(0\) = \(1\)
- \(1\) XOR \(1\) = \(0\)
特性
- 自反性:任何数与自身进行异或运算的结果均为 \(0\)
- 零和性:任何数与 \(0\) 进行异或运算都是其本身
- 交换律:异或运算符合交换律,即 \(a\) XOR \(b\) = \(b\) XOR \(a\)
- 结合律:异或运算符合结合律,即 (\(a\) XOR \(b\)) XOR \(c\) = \(a\) XOR (\(b\) XOR \(c\))
题意
https://codeforces.com/problemset/problem/1151/B
输入两个正整数 \(n, m(1 \leq n, m \leq 500)\),随后输入一个 \(n \times m\) 的矩阵 \(a(0 \leq a_{i,j} \leq 1023)\)。
若你能在每一行找出一个数,并且使得这些数异或的结果严格大于 \(0\),则输出 \(TAK\),并在下一行输出每一行选择的列号;否则输出 \(NIE\)。
题解
要使得 \(n\) 个数的异或值严格大于 \(0\),那么只需要使得其中一个二进制位的异或结果不为 \(0\)即可。
根据异或运算的特性,易知同一个二进制位上 \(1\) 的个数若为奇数,那么该位最后的计算结果必定为 \(1\)。
参考代码
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
using namespace std;
constexpr int N = 507;
int n, m;
int a[N][N];
vector<int> zero[N][10], one[N][10];
int main() {
IOS
cin >> n >> m;
for (int i = 1; i <= n; ++ i) for (int j = 1; j <= m; ++ j) cin >> a[i][j];
//只要让某一位的异或不为0,结果就必定不为0
for (int i = 0; i < 10; ++ i) {
int p = 0, q = 0;
for (int j = 1; j <= n; ++ j) {
for (int k = 1; k <= m; ++ k) {
if (a[j][k] >> i & 1) one[j][i].emplace_back(k);
else zero[j][i].emplace_back(k);
}
if (one[j][i].size() == 0) p ++;
else if (one[j][i].size() == m) q ++;
}
int r = n - p - q;
if ((q & 1) || r > 0) {
cout << "TAK\n";
bool flag = q & 1 ? false : true;
for (int j = 1; j <= n; ++ j) {
int sz = one[j][i].size();
if (sz == 0 || sz == m) cout << "1 ";
else if (flag) {
cout << one[j][i].front() << ' ';
flag = false;
} else cout << zero[j][i].front() << ' ';
}
return 0;
}
}
cout << "NIE\n";
return 0;
}
【异或运算】codeforces 1153 B. Dima and a Bad XOR的更多相关文章
- 网络误区:不用中间变量交换2个变量的value,最高效的是异或运算.
本文记录了不使用中间变量交换2个变量的value,很多的网络留言说是直接异或运算就可以了,而且效率很高,是真的吗? 这里简单的说一下我的环境:Win7 32位,Qt creator 5.4.1 编译器 ...
- C、C++、Java异或运算交换变量变量值的区别
今天看到一位大神的博客,深受感触.决定也发一篇博客,证明一下我还活着. 于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记. 首先来看下面三组表达式,看起来他们都 ...
- HDOJ 1287 破译密码(异或运算)
Problem Description 有个叫"猪头帮"的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符:现在还知道他们加密的方法是:只用一个大写字 ...
- hdu2095 像水题的不错题 异或运算
异或运算的基础有点忘记了 先介绍一下..2个数异或 就是对于每一个二进制位进行位运算 具有2个特殊的性质 1.一个数异或本身恒等于0,如5^5恒等于0: 2.一个数异或0恒等于本身,如5^0恒等于5. ...
- bis和bic命令实现或和异或运算
从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...
- 二进制按位与(&) 按位或(|) 异或运算(^)
1.参加运算的两个数据,按照二进制进行按位与的运算. 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为 ...
- 基于c#的windows基础设计(学习日记1)【关于异或运算】
第一次接触异或运算,总体来说比哈希算法简单的多,无论是理解还是代码的难易度,唯一不好的是在固定了密钥之后,随机性就小了很多,所以安全性比起哈希算法还是有所差距. 原理在网站上很多都有所以就不再赘述了. ...
- MATLAB:图像的与、或、非、异或逻辑运算(&、|、~、xor)
图像的与.或.非.异或逻辑运算涉及到了&.|.~和xor符号 close all;%关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc; clear all; I=imrea ...
- BZOJ4103 异或运算
4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...
- 对java位运算之异或运算的一点记录
首先,异或运算是,每个位上的数不同为1,相同为0. 其次,对两个数值变量的值进行三次异或运算就等于是交换了两个变量的值. 例如: int a = 4; int b = 10; a = a ^ b; b ...
随机推荐
- HEOI2024 题目转存
赛时测试数据下载 wind xor wormhole maze timeline sleep 题解参考 [省选联考 2024] 季风 题目背景 生活在二维平面的小 X 准备拜访小 Y,但由于气候的变化 ...
- 世界第一!华为云图引擎服务GES大幅刷新世界纪录
近日,国际关联数据基准委员会(Linked Data Benchmark Council,以下简称LDBC)公布了社交网络测试交互式负载(SNB INTERACTIVE WORKLOAD,以下简称为S ...
- C# Webapi Filter 过滤器 - 生命周期钩子函数 - Action Filter 基础
ACTION Filter IAsyncACtionFilter 接口 : 1.注入ActionFilter // 注册过滤器 builder.Services.Configure<MvcOpt ...
- 打包项目的时候出错 Multiple assets emit different content to the same filename index.html
上一次的打包的时候 内存已存在 index.html 了所以冲突了 : 解决办法 :关机重启 : 或者改变当前的index.html 文件名称 :
- Notepad--特色功能:拷贝另存为
Notepad--特色功能:拷贝另存为 你是否纠结如下的使用场景: 正在编辑的文件,还没有想好,保存担心把原文件给覆盖了. 使用"另存为"后当前编辑界面的文档又变成新的文件了,可是 ...
- 云原生周刊:CNCF 宣布 Cilium 毕业 | 2023.10.16
开源项目推荐 Reloader Reloader 是一个 Kubernetes 控制器,用于监控 ConfigMap 和 Secrets 中的变化,并对 Pod 及其相关部署.StatefulSet. ...
- KubeSphere 接入外部 Elasticsearch 最佳实践
作者:张坚,科大讯飞开发工程师,云原生爱好者. 大家好,我是张坚.今天来聊聊如何在 KubeSphere 中集成外置的 ES 组件. KubeSphere 在安装完成时候可以启用日志组件,这样会安装 ...
- Top100(下)
Top100(下) 栈 20. 有效的括号 bool isValid(char *s) { int len = strlen(s); if (len % 2 == 1) return false; / ...
- html中div加滚动条
div 加滚动条的两种方法: 一. <div style=" overflow:scroll; width:400px; height:400px;"></div ...
- 2024-10-30:或值至少 K 的最短子数组 I。用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数组中是否存在一个最短的非空子数组,使得该子数组所有元素的按位或(OR)运
2024-10-30:或值至少 K 的最短子数组 I.用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数组中是否存在一个最短的非空子数组,使得该子数组所有元素的按位或(OR)运 ...