题解 P5514 【[MtOI2019]永夜的报应】

这是一道结合位运算 XOR 的性质来找出正解的题。


首先来看一下异或 XOR:

XOR 是 10=1,01=1,00=0,11=0 的一种运算。

所以说白了,就是相同为 0 ,不同为 1

再来看加运算,可以归为某一位相同为0,不同为 1,全 0 为 0, 全 1 则高位加 1

结合上述来看,加运算比异或运算多了一条全 1 则高位加一

所以可得 \(x\) \(xor\) \(y \le x + y\)

题目要求求最小权值,由上式可得,异或优于加。

那么我们只需将所有数异或起来,这样即题目所求。

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n,sum=0;
	cin>>n;
	while(n--) {
		int x;
		cin>>x;
		sum^=x;
	}
	cout<<sum;
	return 0;
}

猜你喜欢

转载自www.cnblogs.com/ahawzlc/p/12636840.html