列表

详情


NC53783. 被鸽了的应急理智顶液

描述

众所周知理智是很重要的,Dr.你要有理智才能指挥干员作战

众所周知Dr.你答应了把你手下都潜1了

众所周知,如题目所言,今日的应急理智顶液补给到现在还没来(被鸽了)

阿米娅手里保管着博士的k瓶应急理智顶液,今天Dr.你要给干员训练潜能,而训练潜能的方式有很多种。 但是理智顶液不够啊,所以Dr.你为了稳 定 军 心,想出了一个办法

只要使众体的实力看起来提高了不少就行了呗~

众体的实力 = 所有人实力的异或和 + 所有人实力或起来

怎么使众体的实力看起来提高了捏

干员是不会吃醋的,所以不会因为你不训练他就动摇军心,训练的方法是点亮他的某项天赋,一个干员有62项天赋,我们用一个整数x的二进制来描述他当前的天赋习得情况(如果该天赋位于前导零的位置,那么该天赋无法被点亮)。 否则你可以选择点亮或者熄灭该天赋。 (习得该天赋则为1,未习得该天赋则为0) 点亮或者熄灭需要一瓶理智顶液

Dr.你肯定知道众体实力最高是多少的啦~

输入描述

一行俩个整数n,k 分别表示有n个干员,k瓶理智顶液

接下来一行n个整数x,二进制下的x表示每个干员的天赋点亮情况

输出描述

一行一个整数表示总体实力最高是多少

示例1

输入:

3 1
1
2
3

输出:

5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 469ms, 内存消耗: 504K, 提交时间: 2020-03-26 16:37:06

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ULL;

const int N = 1000010;

int n, k;
ULL x, res1, res2;

int main(){
	cin >> n >> k;
	while(n--){
		cin >> x;
		res1 ^= x, res2 |= x;
	}
	int pos = 62;
	while(!(res2 >> pos)) pos--;
	for(int i = pos; ~i && k; i--)
		if(!(res1 >> i & 1)) res1 |= (1ull << i), res2 |= (1ull << i), k--;
	cout << res1 + res2 << endl;
}	

上一题