当前位置:网站首页>C - XOR to all (binary topic)
C - XOR to all (binary topic)
2022-07-05 06:16:00 【whitewall_ nine】
https://atcoder.jp/contests/arc135/tasks/arc135_c
#include<iostream>
using namespace std;
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define per(i,l,r) for(int i=(l);i>=(r);i--)
#define ll long long
#define pii pair<int, int>
#define mset(s,t) memset(s,t,sizeof(t))
#define mcpy(s,t) memcpy(s,t,sizeof(t))
#define fir first
#define pb push_back
#define sec second
#define sortall(x) sort((x).begin(),(x).end())
inline int read () {
int x = 0, f = 0;
char ch = getchar();
while (!isdigit(ch)) f |= (ch=='-'),ch= getchar();
while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
return f?-x:x;
}
template<typename T> void print(T x) {
if (x < 0) putchar('-'), x = -x;
if (x >= 10) print(x/10);
putchar(x % 10 + '0');
}
const int N = 35;
int cnt[N];
int a[300005];
int n;
void solve() {
cin >> n;ll ans = 0;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
int t= a[i];
ans += t;
for (int j =0; j <= 30; j ++)
cnt[j] += (t >> j & 1);
}
for (int i = 1; i <= n; i++) {
ll res = 0;
for (int j = 0; j <= 30; j++)
res += ((a[i] >> j & 1) == 1? n - cnt[j] : cnt[j]) * ((ll)1 << j);
ans = max (ans, res);
}
cout << ans << endl;
}
int main () {
int t;
t =1;
while (t --) solve();
return 0;
}
The difficulty lies in how to efficiently count the sum after XOR . We observe binary , For each selected value , We have found , If the binary bit of the current value is 0, Then the binary of the same position of all other numbers is upper 1 Will be preserved , And contribution equals 1 Multiply the number of by the weight of the position . Otherwise, it counts 0 The number of contributions . Pay attention to the synthesis of the initial state . I've been thinking about how to make a sum , Numbers are not considered as binary bits , So we can't find the law . Next time you encounter this problem, you should consider binary representation .
Some properties of XOR
For sequence A, B,B It's from A The result after XOR operation .
a[i]^a[j] = b[i]^b[j];
边栏推荐
- [rust notes] 13 iterator (Part 2)
- Navicat连接Oracle数据库报错ORA-28547或ORA-03135
- redis发布订阅命令行实现
- Appium自动化测试基础 — Appium测试环境搭建总结
- 1039 Course List for Student
- In depth analysis of for (VaR I = 0; I < 5; i++) {settimeout (() => console.log (I), 1000)}
- Appium基础 — 使用Appium的第一个Demo
- Daily question 1342 Number of operations to change the number to 0
- 阿里新成员「瓴羊」正式亮相,由阿里副总裁朋新宇带队,集结多个核心部门技术团队
- New title of module a of "PanYun Cup" secondary vocational network security skills competition
猜你喜欢

可变电阻器概述——结构、工作和不同应用

leetcode-6111:螺旋矩阵 IV

MySQL advanced part 1: View

阿里新成员「瓴羊」正式亮相,由阿里副总裁朋新宇带队,集结多个核心部门技术团队

MySQL advanced part 2: MySQL architecture

LVS简介【暂未完成(半成品)】

Leetcode-6110: number of incremental paths in the grid graph

4. 对象映射 - Mapping.Mapster

Matrixdb V4.5.0 was launched with a new mars2 storage engine!

Leetcode-6108: decrypt messages
随机推荐
Leetcode-3: Longest substring without repeated characters
Leetcode-556: the next larger element III
【Rust 笔记】17-并发(下)
[leetcode] day95 effective Sudoku & matrix zeroing
MySQL怎么运行的系列(八)14张图说明白MySQL事务原子性和undo日志原理
Data visualization chart summary (I)
Usage scenarios of golang context
11-gorm-v2-02-create data
MySQL advanced part 2: the use of indexes
New title of module a of "PanYun Cup" secondary vocational network security skills competition
LeetCode 0108. Convert an ordered array into a binary search tree - the median of the array is the root, and the left and right of the median are the left and right subtrees respectively
LeetCode 0107. Sequence traversal of binary tree II - another method
Chapter 6 relational database theory
WordPress switches the page, and the domain name changes back to the IP address
【Rust 笔记】16-输入与输出(上)
1.14 - 流水线
leetcode-6109:知道秘密的人数
1040 Longest Symmetric String
1039 Course List for Student
The connection and solution between the shortest Hamilton path and the traveling salesman problem