当前位置:网站首页>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] 14 set (Part 2)
- Appium foundation - use the first demo of appium
- QQ computer version cancels escape character input expression
- wordpress切换页面,域名变回了IP地址
- MySQL advanced part 2: optimizing SQL steps
- Leetcode-1200: minimum absolute difference
- Sqlmap tutorial (1)
- leetcode-3:无重复字符的最长子串
- Daily question 1342 Number of operations to change the number to 0
- Arduino 控制的 RGB LED 无限镜
猜你喜欢
SQLMAP使用教程(一)
Chapter 6 relational database theory
QQ电脑版取消转义符输入表情
The connection and solution between the shortest Hamilton path and the traveling salesman problem
Error ora-28547 or ora-03135 when Navicat connects to Oracle Database
WordPress switches the page, and the domain name changes back to the IP address
Quickly use Amazon memorydb and build your own redis memory database
LVS简介【暂未完成(半成品)】
Arduino 控制的 RGB LED 无限镜
LeetCode 0107.二叉树的层序遍历II - 另一种方法
随机推荐
JS quickly converts JSON data into URL parameters
Leetcode recursion
leetcode-9:回文数
1.15 - input and output system
Redis publish subscribe command line implementation
MySQL advanced part 2: MySQL architecture
Leetcode-6109: number of people who know secrets
[rust notes] 16 input and output (Part 1)
Appium automation test foundation - Summary of appium test environment construction
11-gorm-v2-03-basic query
Doing SQL performance optimization is really eye-catching
Leetcode heap correlation
Collection: programming related websites and books
2021apmcm post game Summary - edge detection
4. Object mapping Mapster
1041 Be Unique
快速使用Amazon MemoryDB并构建你专属的Redis内存数据库
MySQL怎么运行的系列(八)14张图说明白MySQL事务原子性和undo日志原理
Records of some tools 2022
Leetcode-3: Longest substring without repeated characters